用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