当前位置:编程学习 > C/C++ >>

用C语言编写一个图书管理系统(录入、查询、排序,文件操作)…………

案例描述:
制作一个简易的图书管理系统,实现新书录入、图书资料查询、显示所有图书信息等功能。  
运行结果示例,如下
补充:程序代码如下:

#include <iostream>
#include <string> //C++磁盘操作头文件
#include <istream>
#include <fstream>
#include <iomanip>//自定义输出宽度
using namespace std;
struct Book    //结构类型
{
 string bookname;//书名
 string author;//作者名
 Book *next;
};
class BookList
{
public:
 BookList(){first=new Book;first->next=NULL;}
 int NewBook();
 void SOldBook();
 void testread();
 void testwrite();
 void DisplayBook();
 ~BookList();
private:
 Book *first;
 int j;
};
int BookList::NewBook()
{
 Book *s;s=new Book; //为插入的新书申请结点
 Book *q;q=new Book;
 Book *p;p=new Book;
 cout<<"输入新书书名:";
 cin>>s->bookname;
 cout<<"输入作者:";
 cin>>s->author;
 p=first;q=first; //建立链表
 if(first->next==NULL)//如果原链表为空,把新书的结点插入到链表中
 { 
  first->next=s; //头插法
  s->next=NULL; 
 }
 else{
  while(p->next->bookname<s->bookname)//按书名排序插入
  {
      p=p->next;
   if(p->next==NULL)break;
  }
  s->next=p->next;
  p->next=s;
 }
    return 1;
}
void BookList::SOldBook()          //查询
{
 Book *s;s=new Book;
 Book *p;p=new Book;
 cout<<"输入你要查询的书名:";
 cin>>s->bookname;
 p=first->next;
 while(p->bookname!=s->bookname)
 {
  p=p->next;//接着查找下一个结点
  if(p==NULL)break;
 }
 if(p==NULL)
  cout<<"你所查询的书没找到!"<<endl;
 else
  cout<<"找到:《"<<p->bookname<<"》  "<<p->author<<endl;
}
void BookList::testread()
{
 ifstream in;j=0;//读出文件流
 in.open("BookList.txt",ios::in);//以读的形式打开原文件
 if(!in)
 {
  cerr<<"错误!不能打开文件!";
  exit(1);
  
 }
 Book *q;q=new Book;
 Book *p;p=new Book;
 p=first;
 cout<<"从BookList.txt中读出已有图书如下:"<<endl;
 while(!in.eof())//判断文件是否为空
 {      
  in>>q->bookname>>q->author;//从文件里面读到链表
  cout<<q->bookname<<"  "<<q->author<<endl;
  j++;
     p->next=q;
  p=q;
  q->next=new Book;
  q=q->next; 
 }
 p->next=NULL;
 cout<<"共有图书"<<j<<"本"<<endl<<endl;
 in.close();
}
void BookList::DisplayBook()
{
 j=0;
 cout<<"本馆现有书籍有:"<<endl;
 Book *p;p=new Book;
 p=first->next;
 while(p!=NULL) //输出链表中的元素
 {
     cout<<p->bookname<<"  "<<p->author<<endl;
  p=p->next;
  j++;
 }
 cout<<"共有图书"<<j<<"本"<<endl;
}
void BookList::testwrite()
{
 ofstream out; //写入文件流
 out.open("BookList.txt",ios::out);
 if(!out)
 {
  cerr<<"错误!不能打开文件!";
  exit(1);
 }
 Book *p;p=new Book;
 for(p=first->next;p!=NULL;p=p->next)
    {
  out<<p->bookname<<'\t'<<p->author<<endl;   //把链表中的元素写到文件中
 }
 out.close();
}
BookList::~BookList()       //析构函数
{
 Book *p;p=new Book;
 Book *q;q=new Book;
 p=first->next;
 while(p)
 {
  q=p;
  p=p->next;
  delete q;
 }
}
void main()
{
 char s;
 int i,k,count=0;
 BookList L;    //定义对象
 L.testread();       //把文件中的内容读到链表中
 while(1)
    {
  char *menu[]={"输入新书","查询旧书","显示所有图书","退出",""};   //字符串指针数组   
     for(i=0;menu[i][0]!='\0';i++)
      cout<<i+1<<"、 "<<menu[i]<<endl;
  cin>>k;
  switch(k)
  {
      case 1:count=L.NewBook();break;
      case 2:L.SOldBook();break;
   case 3:L.DisplayBook();break;
   default:if(k!=4)cout<<"输入错误!"<<endl;break;
  }
  if(k==4)
  { if(count)
   { cout<<"修改后的BookList.txt未保存,是否保存?(y/n):";
                cin>>s;
    if(s=='y')
     L.testwrite();
    
   }
  break;
  }
 }
}

2、课程设计正文格式:

1 题目与要求(左对齐,宋体粗四号)

1.1 问题提出(左对齐,宋体粗小四号)

详细叙述本人所要实现的题目中的问题(小四,宋体)

例如:七段数码管模拟演示

1.2 本题目涉及的知识点

例如:

结构、数组、循环、函数、分支、指针、文件(小四,宋体)

1.3 功能要求

叙述本人所要实现的题目功能(小四,宋体),

例如:

1、建立学生信息,每个学生的信息包括:学号、姓名、性别、班级、成绩;

2、求出每个学生的平均分;

3、排序:分别按平均分排序、按学号排序;

4、根据学号查询成绩;

5、输出:…..

2 功能设计(左对齐,宋体粗四号)

2.1 算法设计(左对齐,宋体粗小四号)

将题目分成若干模块或部分、各模块或部分的算法设计(小四,宋体),

例如:

本系统需要实现的功能要求:

1.      利用switch语句设计如图1所示的主菜单:

(所有的图统一编号,宋体5号,置于图下的中间,)

 2、选择3后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数

 

3、根据所选菜单编写相应代码:

1)输入函数input:利用循环输入的方式,将有关信息存入结构数组,结构数组根据实际的人数,采用动态方式建立……

2)求平均分函数average:.

…….

2.1 模块图

2.2 部分模块流程图

3 程序代码设计(左对齐,宋体粗四号)

内容:分模块(函数)简述其功能;模块中使用的各变量的类型及作用,包括声明数据类型(如结构体);设计过程;并列出该模块(函数)的代码。(宋体小四号)。

例如:

输入模块(模块名宋体粗小四号,其余宋体小四号)

1)函数原形:void input(struct student stu[ ],int n)

2)功 能:利用for循环语句和scanf、gets、getchar函数完成对结构数组的输入,存放n个学生的信息(学号、姓名、性别、4门成绩)。

3)变量及类型:

int a[5][4] :整型形参数组,接收main函数传过来的二维数组的首地址。

int i , j :循环控制变量。

int n :整型形参变量,接收main()传过来的数组人数。

struct student stu[ ]:接收主函数传过来的数组首地址。

4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。(若不需说明部分可省略)

……

4 C程序设计总结(左对齐,宋体粗四号)

内容:

1.      程序调试情况;

2.      本人在程序设计中感想,如:收获、遇到的困难(因某知识点欠缺,编写的程序哪部分有错;因马虎或××方面欠考虑,运行结果不相符等)如何解决问题及困难等。(小四,宋体)

5 结束语(可省略)

内容:用简短的文字对在本次设计过程中给予帮助的人员表示感谢。

(小四,宋体)

参考文献(左对齐,宋体粗四号)

内容:列出课程设计中所参考的所有书目,格式如下:

[1] 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1 (左对齐,宋体,五号)

[2] 陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.6

附录:程序清单(左对齐,宋体粗四号)

内容:按规范格式书写的全部源代码

(Times New Roman字体,5号)

正文排版要求:

1、行间距:1.25倍(在段落/多倍行距中输入1.25);

2、左边距:2cm 右边距:2cm,其余采用默认值;

3、纸 型:A4

答案:

数计学院《程序设计》课程设计报告



图书管理系统

 

 

学生姓名:安玲

学    号:2009117251

班    级:计科0912

指导老师:熊

日    期:2011-6-25

 

 

 

 

 

2、课程设计正文格式:

1 题目与要求

图书管理系统(录入、查询、排序,文件操作)

1.1    问题提出

制作一个简易的图书管理系统,实现新书录入、图书资料查询、显示所有图书信息等功能。  

运行结果示例,如下:

                               

1.2 本题目涉及的知识点

结构、数组、循环、函数、链表、指针、文件

1.3 功能要求

1、程序的输入:只需按系统提示输入整型数字或英文字母即可。每次数据的输入均以回车符作为结束标志。

2、程序的输出:每一项数据输出均有汉字的提示,输出格式均为整型或字符串。

3、程序的系统功能:
(1)、图书库系统管理;
(2)、书籍信息的管理;
(3)、实现新书录入、图书资料查询、显示所有图书信息操作;
(4)、根据需要提供对图书所需的查询方式。

2 功能设计(左对齐,宋体粗四号)

2.1 算法设计(左对齐,宋体粗小四号)

本系统需要实现的功能要求:

1、实现新书录入:

int BookList::NewBook()

{

Book *s;s=new Book; //为插入的新书申请结点

Book *q;

Book *p;

cout<<"输入新书书名:";

cin>>s->bookname;

cout<<"输入作者:";

cin>>s->author;

p=first;q=first; //建立链表

if(first->next==NULL)//如果原链表为空,把新书的结点插入到链表中

{    

        first->next=s; //头插法

        s->next=NULL;     

}

else{

        while(p->next->bookname<s->bookname)//按书名排序插入

        {

            p=p->next;

               if(p->next==NULL)break;

        }

        s->next=p->next;

        p->next=s;

}

    return 1;

}

运行结果如下:

2、图书资料查询:

void BookList::SOldBook()          //查询

{

Book *s;

Book *p;

cout<<"输入你要查询的书名:";

cin>>s->bookname;

p=first->next;

while(p->bookname!=s->bookname)

{

        p=p->next;//接着查找下一个结点

        if(p==NULL)break;

}

if(p==NULL)

        cout<<"你所查询的书没找到!"<<endl;

else

        cout<<"找到:《"<<p->bookname<<"》  "<<p->author<<endl;

}

运行结果如下:

3、显示所有图书信息:

void BookList::DisplayBook()

{

j=0;

cout<<"本馆现有书籍有:"<<endl;

Book *p;

p=first->next;

while(p!=NULL) //输出链表中的元素

{

    cout<<p->bookname<<"  "<<p->author<<endl;

        p=p->next;//指针后移

        j++;//统计书的总数

}

cout<<"共有图书"<<j<<"本"<<endl;

}

void BookList::testwrite()

{

ofstream out; //写入文件流

out.open("BookList.txt",ios::out);

if(!out)

{

        cerr<<"错误!不能打开文件!";

        exit(1);

}

Book *p;

for(p=first->next;p!=NULL;p=p->next)

    {

        out<<p->bookname<<'\t'<<p->author<<endl;   //把链表中的元素写到文件中

}

out.close();

}

运行结果如下:

 

 2、选择3后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数

 

3、根据所选菜单编写相应代码:

1)输入函数input:利用循环输入的方式,将有关信息存入结构数组,结构数组根据实际的人数,采用动态方式建立……

2)求平均分函数average:.

…….

2.1 模块图


图书馆管理系统


数据输入


数据修改


插入


数据添加


查找


浏览

图1  系统功能模块图

 

3 程序代码设计(左对齐,宋体粗四号)

1.       主函数

主函数设计要求简洁,只提供部分提示语和函数的调用

【程序】


显示一系列功能选项


输入n,判断n是否是1~4?


根据n的值调用各功能模块函数


结束


开始


n

内容:分模块(函数)简述其功能;模块中使用的各变量的类型及作用,包括声明数据类型(如结构体);设计过程;并列出该模块(函数)的代码。(宋体小四号)。

例如:

录入模块(模块名宋体粗小四号,其余宋体小四号)

1)函数原形:int BookList::NewBook()

2)功 能:插入(按书名排序进行插入)一本新书(图书的信息:书名、作者名)。

3)变量及类型:

int a[5][4] :整型形参数组,接收main函数传过来的二维数组的首地址。

int i , j :循环控制变量。

int n :整型形参变量,接收main()传过来的数组人数。

struct student stu[ ]:接收主函数传过来的数组首地址。

4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。(若不需说明部分可省略)

查询模块

1、函数原形:void BookList::SOldBook()

2、功能:输入你要查询的书名查询已有图书信息

 

输出模块

1、函数原形:void BookList::DisplayBook()<

上一个:急求:C语言题目的答案,用最简单的方法做!!!!
下一个:跪求C语言服装销售系统代码,要能运行的,谢谢!~

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,