C语言 图书管理系统 课程设计正文.docx
- 文档编号:8491408
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:51
- 大小:144.26KB
C语言 图书管理系统 课程设计正文.docx
《C语言 图书管理系统 课程设计正文.docx》由会员分享,可在线阅读,更多相关《C语言 图书管理系统 课程设计正文.docx(51页珍藏版)》请在冰豆网上搜索。
C语言图书管理系统课程设计正文
学生信息管理系统的设计与实现
1实习目的
1.通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2.通过课程设计,进一步掌握C有并重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3.通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4.通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个中小型系统。
5.通过课程设计,加强了自己的程序分析能力
6.通过本课程设计巩固《C语言程序设计》课程教学成果,深入理解结构体、指针、链表、动态分配内存和文件操作等C程序设计中的中高级技术,熟练掌握C语言的调试方法,初步培养良好的编程习惯和编程风格,初步学习程序文档的撰写方法。
2需求分析
图书管理系统采用的开发工具是VisualC++,主要用于对大量的图书信息,包括图书编号、书名、类型、作者名、出版日期、等进行增加、查询、排序、修改等操作。
同时也包括对用户的管理。
为保存信息,系统将图书信息存储在文件中,每次启动系统时,先将数据从文件中读到单链表中,进行增、删、改、查等操作,在系统推出前,再将单链表中的数据保存到文件中,有效地将数据进行保存。
系统为用户提供了简单的人机界面,使用户可以提供提示,输入操作项,调用系统提供的管理功能。
2.1主要功能需求描述如下
2.11用户登录
首先提示用户输入用户名和密码。
调用文件中存储的用户信息进行校验,只有用户名和密码都匹配时才允许用户使用该系统。
用户可以完成所有操作,可以进行图书的管理,修改,排序等。
2.12系统主控制平台
用户登录以及退出系统两大功能模块。
用户登录中包括添加图书信息、删除图书信息、查询图书信息、图书列表、对图书进行排序、修改图书、录入数据和保存图书信息等。
2.13添加图书信息处理
用户根据提示输入图书的书名、作者、出版社、出版日期、类别、编号、等添加数据。
输入完一条图书信息后,可根据提示继续输入下一条图书信息或继续其他操作,允许输入多条图书信息记录。
输入完图书信息后,以单链表的形式暂时保存在单链表中,等待下一步操作。
系统退出之前,将单链表中的全部图书信息保存到文件中。
2.14删除图书信息处理
首先提示用户输入要修改的图书的编号、类型、书名、作者名、出版时间,用户根据输入的信息在单链表中查找。
如果该图书存在,则首先显示图书的基本信息,并提示用户是否进行删除操作,用户确认删除后,直接删除;如果没找到,系统会给出提示信息。
2.15图书排序信息处理
在选择了图书排序信息后,将图书信息按类型选择排序,然后从内存中调出来显示,最后提示是否显示排序结果。
如果没有查询都任何信息,系统会给出提示信息。
2.16图书列表信息处理
在选择了图书列表信息后,将图书信息从内存中调出来显示,最后提示是否查看图书信息。
如果没有查询到任何信息,系统会给出提示信息。
2.17查询图书信息处理
首先提示用户输入要查找的编号,根据用户输入的编号从单链表中对图书信息进行查询。
查询成功后,显示该图书信息,并提示是否对根据用户输入的信息可以完成对图书的查询。
如果没有查询到任何信息,系统会给出提示信息。
2.18修改图书信息处理
首先要提示用户输入要修改的图书编号,根据用户输入的编号从单链表对图书信息进行查询。
根据菜单输入要修改的图书信息的编号。
然后将内存中输入的信息进行修改。
2.19录入数据信息处理
用户根据提示输入图书的书名、作者、出版社、出版日期、类别、编号、等数据。
输入完一条图书信息后,可根据提示继续输入下一条图书信息或继续其他操作,允许输入多条图书信息记录。
输入完图书信息后,以单链表的形式暂时保存在单链表中,等待下一步操作。
系统退出之前,将单链表中的全部图书信息保存到文件中。
3概要设计
图1
4详细设计
图书管理设置用户登录,用户的身份登录可以对系统中的所有功能模块进行操作。
整个系统的功能模块的是图书信息管理。
系统启动时,主函数中调用对用户模块进行初始化的操作,即设定最初的管理员的用户名(为“admin”)和密码(为“1234”),并对文件进行初始设置,即用户文件不存在,则创建用户文件。
用函数system("color03")来控制整个程序的颜色。
录入数据主要完成图书文件的初始设置,即图书文件不存在,则创建图书文件。
下面对模块的功能做简单介绍。
1.登录系统
系统用选择结构(switch)语句来完成登录操作。
首先提示用户输入用户名和密码,接着判断密码是否正确。
如果密码错误,给出密码输入错误的提示信息;如果密码都正确则进入主程序。
在主程序中完成程序的判断。
2.添加图书信息
系统调用structbook*addbook(structbook*head)函数以增加图书信息,将用户输入的信息添加到图书单链表中,输入完成后提示用户是否继续增加图书信息的操作,如果用户输入“Y”或“y”,则再次调用该函数,实现继续增加图书信息的操作;如果用户输入“N”或“n”,则返回主菜单界面。
3.删除图书信息
系统调用voiddeletebook(structbook*head)完成图书信息的操作。
首先提示用户输入图书的编号,在单链表中查询该图书信息是否存在,如果图书不存在,给出图书不存在的提示信息。
如果图书存在,系统提示是否确认删除,如果用户输入“Y”或“y”,则删除该图书信息,否则返回主菜单界面。
4.图书列表信息
系统调出voidprint_book(structbook*head)函数来输出图书列表信息,将图书链表中的图书信息按指定的格式显示出来,显示完成后,提示用户是否再次浏览,如果用户输入“Y”或“y”,则再次显示单链表中的图书信息;否则,返回主菜单界面。
5.图书排序信息
系统调出voidSort_Book(structbook*head)函数来对图书信息进行排序,选择子菜单,可以分别按编号、出版时间、价格、书名、作者名进行排序。
将图书链表中的图书信息按指定的排序格式显示出来。
(1)按图书编号排序
调用voidNum_Sort(structbook*head)函数按图书编号进行排序。
(2)按出版时间排序
调用voidTime_Sort(structbook*head)函数,按出版时间对图书信息进行排序。
(3)按图书价格排序
调用voidPrice_Sort(structbook*head)函数,按出版时间对图书信息进行排序。
(4)按图书名排序
调用voidBName_Sort(structbook*head)函数,按图书名对图书信息进行排序。
(5)按作者名排序
调用voidWName_Sort(structbook*head)函数,按作者名对图书信息进行排序。
6.查询图书信息
系统调出voidSearch(structbook*head)函数来对图书信息进行查询,选择子菜单,可以分别按编号、出版时间、价格、书名、作者名进行查询。
将图书链表中的图书信息按指定的查询格式显示出来
(1)按图书编号查找
调用voidNum_Search(structbook*head)函数按图书编号进行查找。
(2)按出版时间查找
调用voidTime_Search(structbook*head)函数,按出版时间对图书信息进行查找。
(3)按图书名查找
调用voidBName_Search(structbook*head)函数,按图书名对图书信息进行查找。
(4)按作者名查找
调用voidWName_Search(structbook*head)函数,按作者名对图书信息进行查找。
(5)按类别查找
调用voidClass_Search(structbook*head)函数,按类别对图书信息进行查找。
7.修改图书信息
系统调用voidRevise(structbook*head)函数来修改图书信息,可以根据编号对图书进行修改,包括全部修改和放弃修改。
8.退出系统
退出系统时,首先提示用户是否确定退出,如果用户输入“Y”或“y”,将用户链表中的数据保存到用户文件,用户输入“N”或“n”,则不退出。
5调试与测试结果分析
1.登录系统
系统运行后提示用户输入编号,选择要用户登录还是退出系统。
选择用户登录,系统首次运行时的用户名为“admin”,密码是“1234”,以用户的身份登录系统,进入主菜单界面,登录界面如图2所示,主菜单界面如图3所示。
图2
图3
2.添加图书
在主菜单界面中,输入数字1进入输入添加图书界面,用户可以根据提示信息输入图书的基本信息,输入”y”保存图书信息按回车键返回主菜单界面,输入信息情况如图4。
图4
3.删除图书信息
在主菜单界面中,输入数字2进入输入删除图书界面,用户可以根据提示信息输入图书的编号信息,输入”y”确定删除图书信息按回车键返回主菜单界面,输入信息情况如图5。
图5
4.图书列表
在主菜单界面中,输入数字3进入图书列表界面,系统会显示图书的基本信息,按回车键返回主菜单界面,图书列表信息情况如图6。
图6
5.查询图书
在主菜单界面中,输入数字5进入查询图书界面,用户可以根据提示信息输入图书的基本信息,来查询图书信息,并查看查找的图书。
按回车键返回主菜单界面,查找图书信息情况如图7.
图7
6.修改图书
在主菜单界面中,输入数字6进入修改图书界面,用户可以根据提示信息修改图书的基本信息,输入”y”保存修改后的图书信息按回车键返回主菜单界面,输入信息情况如图8
图8
7.录入数据
在主菜单界面中,输入数字7进入录入图书信息界面,用户可以根据提示信息输入图书的基本信息,输入”y”保存图书信息按回车键返回主菜单界面,输入信息情况如图9
图9
6总结
(1)程序设计思路一定要清晰,主函数尽量简洁,这样在调试过程中若出现错误,只要沿着主函数的思路逐个排查即可。
一个条理清楚的框架结构有利于编译过程中查找并解决问题。
(2)编译、调试时最好分模块进行。
我第一次调试时是在整个程序编辑完后一次性编译,一下子出现了很多处错误。
分模块调试,检查错误是最快的方法。
(3)细节处一定要注意,我刚刚编程时很容易丢落“;”“}”等符号,而这会对程序的编译造成极大的不便。
一个优秀的程序员应时刻注意细节,养成细心的良好品质。
(4)本次C语言课程设计我是通过程序设计课本加上别的参考文献来完成的,其中虽然还存在比较多的瑕疵,但我都是一饱满的热情、认真的态度去对待本次课程设计的。
通过这次课程设计我对完全靠现有的知识,是很难编写出来的。
所以要有读除课本以外的参考书的习惯,可以学习更多的知识。
参考文献
[1]谢延红,王付山.C语言程序设计教程[M].北京:
国防工业出版社,2010.152-171.
[2]梁旭,谷晓琳.C语言课程设计-3版.北京:
电子工业出版社,2013.8
[3]张福祥.C语言程序设计[M].辽宁大学出版社,2008.1
[4]张福祥,王萌.C语言程序设计习题解答与实验实沈阳:
辽宁大学出版社,2008.
[5]牛莉,刘远军等.计算机等级考试辅导教程[M].北京:
中国铁道出版社,2008.
[6]石柱,何新贵.优序法在软件评价中的应用[J].计算机工程与设计,2002,23
(2):
45-46.
附录
#include
#include
#include
structbook
{
intnum;
charbname[50];
charwname[20];
charpress[50];
charsort[50];
inttime;
floatprice;
structbook*next;
};
structbook*creatbook();//创建链表
structbook*addbook(structbook*head);//添加图书
intis_exist(structbook*head,intm);//验证新添加的图书编码是否已存在
voiddeletebook(structbook*head);//删除图书
voidfprint(structbook*head);//将链表写入文件
structbook*load();//从文件中读取信息并建成链表
voidprint_book(structbook*head);//将链表信息输出
voidSearch(structbook*head);//查询图书信息
voidNum_Search(structbook*head);//按图书编号查询图书
voidWName_Search(structbook*head);//按作者名查询图书
voidClass_Search(structbook*head);//按类别查询图书
voidTime_Search(structbook*head);//按出版时间查询图书
voidBName_Search(structbook*head);//按图书名查询图书
voidRevise(structbook*head);//修改图书信息
voidSort_Book(structbook*head);//对图书进行排序
voidNum_Sort(structbook*head);//按图书编号排序
voidTime_Sort(structbook*head);//按图书出版时间排序
voidPrice_Sort(structbook*head);//按图书价格排序
voidBName_Sort(structbook*head);//按图书名排序
voidWName_Sort(structbook*head);//按作者名排序
intmain()
{
system("color03");//控制颜色
intchoice,n,x,y=1,c,c1=1234;
chara,d,b[10],b1[10]="ycl";
structbook*head=NULL;
while(y){
system("cls");//清屏
printf("\n\n\n\n\n\n\n");
puts("╔*☆***◎***◇***☆***欢迎光临***☆***◇***◎***☆*╗\n");
printf("**********************图书信息管理系统************************\n\n\n");
printf("\n\n");
printf("============1-用户登录===========\n");
printf("============0-退出系统===========\n");
printf("请输入您的选择:
");
scanf("%d",&n);
printf("\n");
getchar();
switch(n){
case0:
y=0;
break;
case1:
printf("请输入您的用户名:
");
gets(b);
printf("\n");
printf("请输入您的密码:
");
scanf("%d",&c);
printf("\n");
if(strcmp(b,b1)!
=0||c!
=c1){
printf("验证失败,请重新输入!
\n");
scanf("%c",&d);
getchar();
system("cls");
}
else{
printf("验证通过!
请按Enter键进入!
\n");
scanf("%c",&d);
getchar();
x=1;
while(x){
system("cls");
printf("------------------\n");
printf("*图书信息管理系统*\n");
printf("------------------\n\n");
printf("**********************************************\n\n");
printf("**********************************************\n\n");
printf("||1-添加图书2-删除图书||\n\n");
printf("||3-图书列表4-图书排序||\n\n");
printf("||5-查询图书6-修改图书||\n\n");
printf("||7-录入数据0-退出系统||\n\n");
printf("**********************************************\n\n");
printf("**********************************************\n\n");
printf("请输入所选择的序号:
");
scanf("%d",&choice);
getchar();
system("cls");
switch(choice)
{
case0:
x=0;break;
case1:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
head=addbook(head);
printf("添加成功!
\n");
printf("是否将新信息保存到文件?
(y/n)\n");
scanf("%c",&a);
getchar();
switch(a){
case'n':
break;
case'y':
fprint(head);
printf("保存成功!
\n");
getchar();
break;
}
break;
}
case2:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
deletebook(head);
getchar();
break;
}
break;
case3:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
print_book(head);
getchar();
break;
}
case4:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
Sort_Book(head);
getchar();
}
break;
case5:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
Search(head);
getchar();
}
break;
case6:
head=load();
if(head==NULL){
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
Revise(head);
getchar();
break;
}
break;
case7:
printf("注意:
输入图书编码为0时结束!
\n");
head=creatbook();
printf("是否将输入的信息保存到文件以覆盖文件中已存在的信息?
(y/n)\n");
getchar();
scanf("%c",&a);
getchar();
switch(a){
case'n':
break;
case'y':
fprint(head);
printf("保存成功!
\n");
getchar();
break;
}
break;
default:
printf("您的输入有误,请重新输入!
\n");
getchar();
break;
}
}
}
break;
default:
printf("您的输入有误!
请重新输入!
\n");
getchar();
break;
}
}
}
//录入数据并形成链表
structbook*creatbook()
{
structbook*head,*tail,*p;
intnum,time,n;
charbname[50],wname[20],press[50],sort[50];
floatprice;
intsize=sizeof(structbook);
head=tail=NULL;
printf("请输入图书编号:
");
scanf("%d",&num);
printf("请输入图书名:
");
scanf("%s",bname);
getchar();
printf("请输入作者名:
");
scanf("%s",wname);
getchar();
printf("请输入出版社:
");
scanf("%s",press);
getchar();
printf("请输入类别:
");
scanf("%s",sort);
getchar();
printf("请输入出版时间:
");
scanf("%d",&time);
getchar();
printf("请输入价格:
");
scanf(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 图书管理系统 课程设计正文 语言 图书 管理 系统 课程设计 正文