[理学]秦思军C语言课程设计课程设计.doc

上传人:sccc 文档编号:4544311 上传时间:2023-04-27 格式:DOC 页数:38 大小:1.12MB
返回 下载 相关 举报
[理学]秦思军C语言课程设计课程设计.doc_第1页
第1页 / 共38页
[理学]秦思军C语言课程设计课程设计.doc_第2页
第2页 / 共38页
[理学]秦思军C语言课程设计课程设计.doc_第3页
第3页 / 共38页
[理学]秦思军C语言课程设计课程设计.doc_第4页
第4页 / 共38页
[理学]秦思军C语言课程设计课程设计.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《[理学]秦思军C语言课程设计课程设计.doc》由会员分享,可在线阅读,更多相关《[理学]秦思军C语言课程设计课程设计.doc(38页珍藏版)》请在三一办公上搜索。

1、Yangtze University College of Arts and Science学生实习手册(课程设计报告)学 部: 理 工 学 部 专 业: 电 子 信 息 工 程 班 级: 5111班 姓 名: 秦 思 军 学 号: 20114002 课程名称: C语言程序设计课设 指导教师: 杜红 呙明辉 实习时间:2012年7月6日至2012年7月14日一、课设题目 图书管理系统二、设计目的 问题描述:本程序属于非数值计算型算法设计,学生需要设计出图书馆模拟系统所需要的基本功能,并设计简单的界面(无需图形化)。 实现功能: 1、通过提示菜单选择可以进行的操作2、将图书的基本信息存入文件中,

2、并命名为book.txt3、将图书借阅统计信息存入文件中,并命名为record.txt4、将图书卡号统计信息存入文件中,并命名为card.txt4、在本系统中可以进行管理系统包含的基本操作,其中包括:a) 输入图书的图书名或作者名,从当前图书中进行查找,如果找到则显示该图书的相关信息,如果没有找到则给出提示信息;b) 添加图书的基本信息,通过输入图书相关信息,首先查找是否存在该图书名的图书,如果存在则提示重新输入,否则将该图书按照顺序插入到相应位置;c) 修改图书的基本信息,通过输入图书名,首先查找是否存在该图书名的图书,如果存在则提示重新输入,否则将提示修改项(序号、书名、作者、单价),依据

3、提示进行修改;d) 删除图书的基本信息,通过输入图书名,首先查找是否存在该图书名的图书,如果存在则将该图书删除,否则给出提示信息,提示该图书不存在;e) 借阅图书,需要给出卡号和图书书名,如果图书名不存在则重新输入,直到输入正确为止,并将学号和相应的图书名存入record.txt文件中。f) 归还图书,需要输入卡号和图书书名,如果图书名不存在则重新输入,直到输入正确为止,然后确认归还;g) 统计分为对在架图书、学生借阅图书、借书卡三项的统计,申请卡号借阅书籍会对三项统计进行修改,显示。5、图书基本信息包括图书序号、书名、作者、单价、状态这些简单信息。6、图书信息文件中每一行存放一本图书的信息。

4、7、借阅信息文件中每一行存放一本书的借阅情况。掌握知识点:本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组和文件的相关操作,包括数组的输入、输出、查找、插入、删除、修改和文件不同形式的读取、写入等操作,需要对数组和文件有比较深入的掌握。三、总体设计1、图书管理系统组成框图2、调用的借阅、卡号统计函数流程图3、调用的删除图书、卡号函数流程图4、调用修改图书函数流程图四、详细设计模块功能说明: (包括结构体、借阅统计函数、卡号统计函数、删除图书函数、 删除卡号函数、修改图书函数)1、结构体:包括学生借阅信息、图书相关信息、借阅卡信息struct student/学生借阅信息结构体i

5、nt cardnum;/卡号char borrowbook10;/借阅图书student100;struct book/图书相关信息结构体int booknum;/图书序号char bookname20;/图书名 int bookprice;/图书单价char bookauthor20;/图书作者 int status;/图书状态book100;struct card/借阅卡信息结构体 int cardnum;/卡号 char sex4;/性别 char studentname20;/学生姓名 int studentclass;/学生班级card100;2、借阅统计函数功能:在被调用时,将图书

6、库里的所有被借图书统计起来, 当增加或删除图书时,不能改变此统计结果;当借出或归还时,才能改变它;(此函数无参数,所以无参数说明和函数调用关系)borrowcount()/借阅统计system(cls); /清屏FILE *fp;int i,n=0;printf(nttt借书统计nn); /进入借书统计界面fp=fopen(record.txt,r); /将文件record.txt以读的方式打开for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+)printf(t卡号tt借出的书籍n);printf(t%dtt%sn,studen

7、ti.cardnum,studenti.borrowbook);n=n+1; /读一次就在统计上加一fclose(fp);printf(目前共有%d本书借出n返回三级菜单n,n);getche();return 0;3、卡号统计函数功能:在被调用时,将在此图书馆办理借阅卡统计起来, 当增加或删除卡时,能改变此统计结果;(此函数无参数,所以无参数说明和函数调用关系)cardcount()/卡号统计system(cls); /清屏FILE *fp;int i,n=0;printf(nttt卡号统计nn); /进入卡号统计界面fp=fopen(card.txt,r); /将文件card.txt以读的

8、方式打开for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+) printf(第%d张卡n,i+1);printf(t卡号tt性别tt姓名tt班级n);printf(ttn);printf(t%dtt%stt%stt%dn,cardi.cardnum,cardi.sex,cardi.studentname,cardi.studentclass);n=n+1; /读一次就在统计上加一fclose(fp);printf(n目前共有%d个学生n按任意键返回三级菜单n,n);getche();4、删除图书函数功能:在被调用时,将图书库里需要删除的书籍

9、删除,不需考虑其是 借出(此函数无参数,所以无参数说明和函数调用关系)delbook()/删除图书system(cls);FILE *fp,*fp2;int i;char bookname10,choice;printf(nttt删除图书nn); /进入删除图书界面fp=fopen(book.txt,r); /将文件book.txt以读的方式打开fp2=fopen(book1.txt,w); /将文件book1.txt以写的方式打开printf(t书名:nt ); scanf(%s,bookname);for(i=0;fread(&booki,sizeof(struct book),1,fp)

10、!=0;i+)if(strcmp(bookname,booki.bookname)!=0) / 通过比较,在图书库里寻找所删除的图书 fwrite(&booki,sizeof(struct book),1,fp2);/将非删除的所有书写到book1.txtfclose(fp);fclose(fp2);printf(t确认删除(y/n)?nt );getchar();scanf(%c,&choice);if(choice=y|choice=Y)fp=fopen(book.txt,w);fp2=fopen(book1.txt,r);for(i=0;fread(&booki,sizeof(struc

11、t book),1,fp2)!=0;i+)fwrite(&booki,sizeof(struct book),1,fp); /将book1.txt里数据写到book.txtfclose(fp);fclose(fp2);fp2=fopen(book1.txt,w);fclose(fp2); /清空临时文件book1.txtprintf(t删除成功,按任意键返回三级菜单n);getchar();return 0;else printf(t按任意键返回n);getche();return 0;5、删除卡号函数功能:在被调用时,将卡号库里面需要删除的卡号删除;(此函数无参数,所以无参数说明和函数调用关

12、系)delcard()/删除卡号system(cls);FILE *fp,*fp2;int i;int cardnum;char choice;printf(nttt删除卡号nn); / 进入删除卡号界面fp=fopen(card.txt,r);fp2=fopen(book1.txt,w);printf(t要删除的卡号(不存在则不作改动):nt );scanf(%d,&cardnum);for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+)if(cardi.cardnum!=cardnum) / 通过比较,在卡号库里寻找所删除的卡号fwrit

13、e(&cardi,sizeof(struct card),1,fp2); /将非删除的卡号写到book1.txtfclose(fp);fclose(fp2);printf(t确认删除?(Y/N)!nt );getchar();scanf(%c,&choice);if(choice=y|choice=Y)fp=fopen(card.txt,w);fp2=fopen(book1.txt,r);for(i=0;fread(&cardi,sizeof(struct card),1,fp2)!=-0;i+)fwrite(&cardi,sizeof(struct card),1,fp); /将book1.

14、txt里数据写到card.txtfclose(fp);fclose(fp2);fp2=fopen(book1.txt,w);fclose(fp2); /清空临时文件book1.txt printf(t删除成功,返回三级菜单n);getchar();return 0;else getchar();printf(t操作已取消!n按任意键返回n);getche();return 0;6、修改图书函数功能:在其被调用时,将需修改的图书基本信息进行修改,分为对图书序号、图书名、作者及单价的修改;(此函数无参数,所以无参数说明和函数调用关系)changebook()/修改图书system(cls);FIL

15、E *fp,*fp2;char bookname10,choice;int i;printf(nttt修改图书nn); /进入修改图书界面fp=fopen(book.txt,r);fp2=fopen(book1.txt,w);printf(t书名:nt ); /输出需修改的书名scanf(%s,bookname);getchar();for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+)if(strcmp(booki.bookname,bookname)=0)/寻找所需修改的图书printf(t你所要修改的书的资料如下,请选择你要修改的内容:

16、n); printf(t序号tt书名tt作者tt单价n); printf(t%dtt%stt%stt%dn,booki.booknum,booki.bookna me,booki.bookauthor,booki.bookprice);printf(nt1:修改书号:n);printf(t2:修改书名:n);printf(t3:修改作者:n);printf(t4:修改单价:n);printf(t请输入-4:nt );choice=getchar();switch(choice) /选择1-4的不同修改项case 1:printf(t新的书号:nt );scanf(%d,&booki.bookn

17、um);fwrite(&booki,sizeof(struct book),1,fp2);break;case 2:printf(t新的书名:nt );scanf(%s,booki.bookname);fwrite(&booki,sizeof(struct book),1,fp2);break;case 3:printf(t新的作者:nt );scanf(%s,booki.bookauthor);fwrite(&booki,sizeof(struct book),1,fp2);break;case 4:printf(t新的单价:nt );scanf(%d,&booki.bookprice);f

18、write(&booki,sizeof(struct book),1,fp2);break;default:printf(t没有这样的操作!);break;getchar();continue;fwrite(&booki,sizeof(struct book),1,fp2);/将修改后的图书信息写入book1.txtfclose(fp);fclose(fp2);fp=fopen(book.txt,w);fp2=fopen(book1.txt,r);for(i=0;fread(&booki,sizeof(struct book),1,fp2)!=0;i+)fwrite(&booki,sizeof

19、(struct book),1,fp);/将book1.txt数据写入book.txtprintf(t修改成功,按任意键返回二级菜单n);getche();fclose(fp);fp2=fopen(book1.txt,w); / 将临时文件清空fclose(fp2);五、运行结果及分析1、调用借阅统计函数时的运行结果2、调用卡号统计函数时的运行结果3、调用删除图书函数时的运行结果4、调用删除卡号函数时的运行结果5、调用修改图书函数时的运行结果六、调试与测试 调试就是利用软件的功能将程序的每一步按照流程走一次,如果出现问题就能很直接,很精确地找出问题的所在,从而更好地解决问题。 调试方法:将断点

20、设在需检测的程序语句的首段,特别是要在关键、易出错的地方;然后开始调试,按照要求一步一步的进行,遇到停止的地方说明此处有问题,还可以在watch里面输入你要观察的变量这样就更直接的观察程序是怎样运行的,看是不是按照自己的程序思想在进行。 测试结果的分析:在运行测试某段程序时,如果程序一直按照编译者的初衷来运行,并且没有“卡壳”,说明测试结果理想;否则,就是程序出现问题,就得分析原因,找出症结所在,在不断的更改讨论和调试运行中,得出最好的解决方案。 在此,我调试了一下删除图书函数与主函数的连接及调用 函数运行的过程:1、调用删除函数drlbook()之前在主函数里2、调用此函数即转到此函数当中3

21、、在此函数里面正常运行 在此次我负责的程序段中,我是首先运行是否有错,功能是否实现,最后才进行调试,并且调试的结果是理想的,所以没有在调试中遇到问题。七、课程设计心得及体会本次课程设计经历地十分辛苦,想必都有这个体会(老师也不例外),这就是我们在上半学期没有更好地学习C语言知识,同时也没有接触课外有关于C语言方面的知识,才导致我们一下碰到这么复杂,从没接触过的课设(对于我们而言);但是也就是因为这种情况,我才意识到自己这方面的知识太薄弱了,什么事、知识都不能一味地考老师来教,自己得有自觉学习的能力和习惯。在编程的一个多星期里,以小组为单位的我们表现了团队的力量,分工明确,虽然途中遇到过很多困难

22、,我们依然坚定地解决了,最后完成了设计。再说一下我自己在这个过程当中的体会:编程的过程使我了解到我还有好多东西没有掌握,或者没有接触到的知识点,但是也通过自己的自学、请教老师、同学,学到了不少东西,例如:在编程方面对结构体的理解与运用,熟练运用文件,学会怎样去调试某段程序使之运行得当;在计算机方面,学会了好多有关计算机方面的知识总结:本次课程设计虽然“历经磨难”,但也“硕果累累”,不仅是一个挑战,更是一个提醒,提醒我大学应该做什么,怎样学习才更有效,将来步入社会,将何去何从等等一系列“有营养”的话题。最后,我还期待着下一个课程设计会给我带来什么“营养”,我将拭目以待八、源程序清单和执行结果:#

23、include#include#include#include#includestruct student/学生借阅信息结构体int cardnum;/卡号char borrowbook10;/借阅图书student100;struct book/图书相关信息结构体int booknum;/图书序号char bookname20;/图书名 int bookprice;/图书单价char bookauthor20;/图书作者 int status;/图书状态book100;struct card/借阅卡信息结构体 int cardnum;/卡号 char sex4;/性别 char studen

24、tname20;/学生姓名 int studentclass;/学生班级card100;search_by_name()/按图书名查阅FILE *fp;char bookname10;int i,flag=0;fp=fopen(book.txt,r);printf(t请输入你要查找的书名:nt );scanf(%s,bookname);for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) /将book.txt内容读到图书数组if(strcmp(bookname,booki.bookname)=0) /通过比较,在图书库里查询要找的书flag

25、=1;if(booki.status=1) /当图书存在status=1输出相关信息fclose(fp);printf(t书号tt书名tt作者tt单价nt%dtt%stt%stt%dn,booki.booknum,booki.bookname,booki.bookauthor,booki.bookprice);printf(t此书无人借阅n); / status=1elseprintf(t这本书已经有人借出n); / status=0fclose(fp);return 0;if(flag=0)printf(t没有你要查询的书籍!n);fclose(fp);return 0;search_by_

26、author()/按作者名查阅FILE *fp;char bookauthor10;int i,flag;fp=fopen(book.txt,r);printf(t请输入你要查找的作者名:nt );scanf(%s,bookauthor);for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) /将book.txt内容读到图书数组if(strcmp(bookauthor,booki.bookauthor)=0) /通过比较,在图书库里查询要找的书flag=1;if(booki.status=1) /当图书存在status=1输出相关信息 fc

27、lose(fp);printf(t书号tt书名tt作者tt单价nt%dtt%stt%stt%dn,booki.booknum,booki.bookname,booki.bookauthor,booki.bookprice);printf(t此书无人借阅n); / status=1elseprintf(t这本书已经有人借出n); / status=0fclose(fp);return 0;if(flag=0)printf(t没有你要查询的书籍!n);fclose(fp);return 0;search()/查阅图书system(cls);char ch4;doprintf(nttt查找书籍nn)

28、;printf(t1:按书名查找n);printf(t2:按作者查找n);printf(t0:返回主菜单n);printf(t请输入0-2:nt );ch4=getchar();switch(ch4)case 1:getchar();search_by_name();getchar();break; /调用书名查询方式函数case 2:getchar();search_by_author();getchar();break;/调用作者查询方式函数case 0:printf(t返回主菜单n);getchar();break;default:printf(t无此操作!n);getchar();br

29、eak;while(ch4!=0);return 0;void borrowbook()/借阅图书system(cls);FILE *fp,*fp2; struct student stu;int i,flag1=0,flag2=0;int cardnum;printf(nttt借阅图书nn); /进入借阅图书界面printf(t请输入借书人的:nt卡号:nt );scanf(%d,&cardnum); getchar();fp=fopen(card.txt,r);for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+)if(cardi.car

30、dnum=cardnum) flag2=1;fclose(fp);printf(t书名:nt );scanf(%s,stu.borrowbook);getchar();fp=fopen(book.txt,r);for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+)if(strcmp(booki.bookname,stu.borrowbook)=0) flag1=1;if(booki.status=0) printf(t对不起,此书有人借出,请借其他书n);printf(t按任意键返回主菜单n); fclose(fp);getch();else

31、fclose(fp);fp=fopen(record.txt,a+);stu.cardnum=cardnum;fwrite(&stu,sizeof(struct student),1,fp);fclose(fp);fp=fopen(book.txt,r);fp2=fopen(book1.txt,w);for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+)if(strcmp(booki.bookname,stu.borrowbook)=0)booki.status=0; fwrite(&booki,sizeof(struct book),1,f

32、p2); continue;fwrite(&booki,sizeof(struct book),1,fp2);fclose(fp);fclose(fp2);fp=fopen(book.txt,w);fp2=fopen(book1.txt,r);for(i=0;fread(&booki,sizeof(struct book),1,fp2)!=0;i+)fwrite(&booki,sizeof(struct book),1,fp);fclose(fp);fclose(fp2);fp2=fopen(book1,txt,w);fclose(fp2);printf(t借书完毕,按任意键返回主菜单n);g

33、etche();if(flag1=0)printf(t不存在这样的书,按任意键返回n);fclose(fp);getche();if(flag2=0)printf(t你的卡号不存在,请申请新卡,按任意键返回n);fclose(fp);getche();void returnbook()/还书system(cls);FILE *fp,*fp2;int i,flag1=0,flag2=0;int cardnum;char borrowbook10;printf(nttt欢迎进入还书界面n);printf(nt请你输入你的nt卡号:nt );scanf(%d,&cardnum);getchar();

34、fp=fopen(card.txt,r);for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+)if(cardi.cardnum=cardnum)flag1=1;fclose(fp);printf(t请输入你要还的书的名字:nt );scanf(%s,borrowbook); getchar();fp=fopen(record.txt,r);for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+)if(strcmp(studenti.borrowbook,borrowbook)=0

35、) flag2=1;fclose(fp);fp=fopen(record.txt,r);fp2=fopen(book1.txt,w);for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+)if(strcmp(studenti.borrowbook,borrowbook)=0)continue;fwrite(&studenti,sizeof(struct student),1,fp2);fclose(fp);fclose(fp2);fp=fopen(record.txt,w);fp2=fopen(book1.txt,r);for(i=0;fread(&studenti,sizeof(struct student),1,fp2)!=0;i+)fwrite(&studenti,sizeof(struct student ),1,fp);fclose(fp);fclose(f

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号