C语言程序设计图书信息管理系统.docx
- 文档编号:29537384
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:33
- 大小:96.28KB
C语言程序设计图书信息管理系统.docx
《C语言程序设计图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计图书信息管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
C语言程序设计图书信息管理系统
《程序设计基础(C)》课程设计报告
图书信息管理系统
学生姓名:
朱斌
学号:
201211354
班级:
电力工程与管理1201班
指导老师:
邓伟华
日期:
2013.07.05
兰州交通大学新能源与动力工程学院
C语言课程设计报告
一、设计目标
图书信息包括:
登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
设计的图书信息管理系统,应当具备能提供以下功能:
1、系统以菜单方式工作
2、图书信息录入功能--输入
3、图书信息浏览功能--输出
4、图书信息查询功能--算法(查询方式:
1按书名查询.2.按作者名查询)
5、图书信息的删除与修改
二、总体设计
1.程序设计组成框图
2.程序流程图
`
三、详细设计
1、系统登录模块(f1())——本函数由 朱斌 设计
1)函数的功能:
验证管理员信息,进入菜单功能界面
2)函数的入口:
从main()的switch()结构中进入,即choice的值为1时进入函数,然后提示用户通过键盘对输入管理员账户及密码。
3)函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
4)函数的出口:
当验证失败,提示重新输入。
当验证成功,通过“ENTER”键,跳出switch()开关函数,进入菜单功能模块,继续执行选择结构。
程序流程图:
图书登录系统界面
2.菜单功能选择模块(f2())——本函数由 周勇 设计
1)函数功能:
主要作用是提示用户操作,体现模块化思想,主要是显示出菜单让用户选择要进行的任务。
2)函数入口:
从主函数void中的adm_servelist()进入函数,这是直接被主函数void()调用的。
3)函数调用关系:
被主函数调用。
并在文中无返回值的空值void函数。
4)函数的出口:
执行完所有的printf()函数后自动退出该函数。
主函数的流程图
菜单界面
3.修改与删除模块(f3())——本函数由 王文模 设计
图书删除
1)函数功能:
利用while循环和if语句和scanfgetcharsearchchangedel函数,完成对图书信息(分类名出版单位出版时间价格)的修改和删除
2)函数入口:
从主函数main()中的system("cls");/*清屏命令*/menu();/*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数main()调用的。
3)调用关系:
voidchange(intx)是改变图书信息,它里面又调用了book_search();
4)函数出口:
执行完所有的printf()函数后自动退出该函数。
程序框架图
图书修改
该模块实现按照用户需求,将需要修改的图书名输入,进行for循环查找是否有此书,若无,则显示未找到,退出,若有,则显示输入新的图书信息,开始输入修改的信息,进行for循环开始录入,替换原文件信息结束显示“修改成功”
图书修改界面
图书删除界面
4.图书信息浏览(f4())——本函数由 张旭东 设计
1)函数的功能:
显示图书的信息(编号·价格·作者·出版单位·出版时间·类别)
2)函数的入口:
从主函数main()中的system("cls");/*清屏命令*/menu();/*菜单函数提示用户怎样选择04信息浏览/进入函数,这是直接被主函数main()调用的。
3)函数调用关系:
被主函数调用。
并在文中无返回值的空值void函数。
4)函数的出口:
执行完所有的printf()函数后自动退出该函数。
框架图
图书浏览流程图
图书浏览
5.图书查询——本函数由杨国峥设计
1)函数的功能:
按着书名查询与作者名查询,输出排序结果。
2)函数的入口:
程序从main()的while()开关结构中进入,即choice的值为4时进入该函数,开始进入该函数,进入函数后,首先打开文件,然后利用“printf()”选择按书名查询与作者名查询,若flag=1或flag=2则有此书。
若flag=0则无此书,并退出查询。
3)函数调用关系:
被主函数调用。
由while()开关结构中进入,并在文中无返回值的空值void函数。
4)函数的出口:
当输出查询结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break;”跳出while()开关函数,继续执行if选择结构。
按图书名查询
按作者名查询
6.输入模块——本函数由闫鹏设计
1)函数的功能:
利用for循环语句和scanf、gets、getchar函数完成对结构数组的输入,存放图书信息(图书编号、图书名、作者名、出版社、类别、出版时间、价格)。
2)函数的入口:
从主函数main()中的system("cls");/*清屏命令*/menu();/*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数main()调用的。
3)函数调用关系:
被主函数调用。
并在文中无返回值的空值void函数。
4)函数的出口:
:
执行完所有的printf()函数后自动退出该函数。
程序框架图:
图书信息输入
四、调试与测试
调试方法:
打开MicrosoftVisualC++6.0,先将各个功能函数的的内容清空,只保留主函数main(),然后编译检验main()函数中是否有错,如果没有错误,再连接、运行。
确认main()函数一切无误后,然后加入功能函数menu()函数与f1()函数,由于menu()函数比较简单,所以与f1()函数一起进行调试,f1()函数中主要注意读取文件,与写入文件,这都是二进制的形式。
若menu()函数与f1()函数编译、连接、运行没问题,继续加入f2()函数,就这样的方法依次检查调试f3()函数、f4()函数。
当所有的功能函数都加上且正确无误时,就可以进入下一个环节—程序的测试。
测试方法:
运行程序,然后进入销售管理系统的界面,在这里需要做的就是把自己当成一个公司的程序使用者,来对该程序进行使用,看该程序有哪些方面用着不够爽,把这些问题依次整理出来,再对源程序进行修改,在这个过程中也需要对程序进行调试,不过不必将各个功能函数的的内容清空再进行如上述的调试方法,而是,改一部份运行一次,看是否有无。
如f1()函数有误,则先修改f1()函数,一块一块的进行修改,就是遵循C语言的模块化设计原理,若所有的都改过来了,且运行无误,那就大功告成了。
在调试中遇到的问题:
在调试过程中,我们遇到诸多小问题,但都在我们共同讨论后解决了。
1、问题:
标点符号在输入的时候,使用的是中文输入法,这种错误一般都难以发现,让修改的时候找不到目标。
解决方法:
用“替换”。
如果程序中的error很多,不管error是什么,先将标点替换成英文的标点。
2、问题:
调试时,有的时候编译后没什么问题,就是在点击连接link时出现了错误。
而且,这种错误让我们不知道怎么修改。
但是我们的程序的确正确。
解决方法:
将源程序保存(save),然后关掉MicrosoftVisualC++6.0,重新启动MicrosoftVisualC++6.0,
五、分析及结论
A、在设计中我们实现了设计目标的所有内容
即:
1、系统以菜单方式工作
2、图书信息录入功能--输入
3、图书信息浏览功能--输出
4、图书信息查询功能--算法(查询方式:
1按书名查询.2.按作者名查询)
5、图书信息的删除与修改
B、其中遇到了以下问题:
不能清晰的建立设计模块,不会修改出现的错误等等。
解决方案:
向同学寻求帮助,向他们学习,最终通过自己努力建立了模块。
不可避免地程序中肯定依然存在者某些问题在应用中不断提高自己的能力,攻克遇到的困难。
C、该程序的不足:
函数较复杂,界面不美观。
D、实践心得
经过一个多星期的编译原理课程设计,在我们一组的共同的努力下,顺利完成该课程设计。
通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。
老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。
现在终于深刻的了解了这句话。
经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对C程序原理也了有更深的理解。
知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。
通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。
能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。
除了课堂外,课程设计是最能学到东西的,最考验人的。
在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。
经过这次课程设计,让我们对C++这门语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。
只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。
在编写本程序时,在网上寻找的参考程序起到了很大的启发与参考作用。
六、参考文献
1、《C语言程序设计.谭浩强版》
2、《C语言上机指导》
3、《MicrosoftVisualC++6.0指南》
4、附:
在编写本程序时,在网上寻找的参考程序起到了很大的启发与参考作用。
七、附录
源程序清单
源程序清单
#include
#include
#include
structbook{//声明BOOK类的所有变量
intnum;
charbname[50];
charwname[20];
charpress[50];
charsort[50];
inttime;
floatprice;
structbook*next;
};
structbook*creatbook();//创建链表
structbook*addbook(structbook*head);//添加图书
intyanzheng(structbook*head,intm);//验证新添加的图书编码是否已存在
voiddeletebook(structbook*head);//删除图书
voidfprint(structbook*head);//将链表写入文件
structbook*load();//从文件中读取信息并建成链表
voidprint_book(structbook*head);//将链表信息输出
voidchaxun(structbook*head);//查询图书信息
voidwname_chaxun(structbook*head);//按作者名查询图书
voidbname_chaxun(structbook*head);//按图书名查询图书
voidxiugai(structbook*head);//修改图书信息
intmain()——本代码由小组 设计
{
intchoice,n,x,y=1,c,c1=317;//choice选择进入哪项功能:
对图书的增删改查
chara,d,b[10],b1[10]="317";
structbook*head=NULL;//声明一个新的book类
while(y)//实现登录退出系统这两个选项在输入口令错误时产生的循环
{
system("cls");//清屏
printf("|=========================================|\n");
printf("|欢迎进入|\n");
printf("|兰州交通大学图书管理系统|\n");
printf("|========================================|\n");
printf("||请输入选项(0--1)||\n");
printf("|========================================|\n");
printf("|1-用户登录|\n");
printf("|0-退出系统|\n");
printf("|=======================================|\n\n");
printf("请输入您的选择:
");
scanf("%d",&n);//读取选项0/1
printf("\n");
getchar();//从stdio流中读字符
switch(n){//进入选择
case0:
y=0;
break;
case1:
printf("请输入您的用户名:
");
gets(b);//获取输入的字符将字符赋值为b
printf("\n");
printf("请输入您的密码:
");
scanf("%d",&c);
printf("\n");
if(strcmp(b,b1)!
=0||c!
=c1){//strcmp比较功能b1c1之前赋值为317317只要刚输入的b与c存在不等于317
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");
printf("***********************************\n");
printf("||请输入选项(0--6)||\n");
printf("***********************************\n");
printf("||1-添加图书2-删除图书||\n\n");
printf("||3-信息浏览4-信息查询||\n\n");
printf("||5-修改图书6-创建图书||\n\n");
printf("||0-退出系统||\n");
printf("******************************************\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{
chaxun(head);//执行查询
getchar();
}
break;
case5:
head=load();
if(head==NULL){//链头尾节点一致即文件为空
printf("文件为空,请先录入数据!
\n");
getchar();
break;
}
else{
xiugai(head);//执行修改
getchar();
break;
}
break;
case6:
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("%f",&price);
getchar();
while
(1){
p=(structbook*)malloc(size);
p->num=num;
strcpy(p->bname,bname);//赋值把后者复制给前者
strcpy(p->wname,wname);//赋值把后者复制给前者
strcpy(p->press,press);//赋值把后者复制给前者
strcpy(p->sort,sort);//赋值把后者复制给前者
p->time=time;
p->price=price;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;//赋值将地址付给下一个形成链
tail=p;
do{
printf("请输入图书编号:
");
scanf("%d",&num);
n=yanzheng(head,num);//验证添加的图书编号是否已存在
if(n==0)
break;
else
printf("您输入的编号已存在,请重新输入!
\n");
}while
(1);
if(num==0)
break;
else
{
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("%f",&price);
getchar();
}
}
returnhead;
}
intyanzheng(st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 图书 信息管理 系统