




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机学院 C语言程序设计课程设计报告学号2016-2017学年 第二学期C语言程序设计课程设计报告题目:图书管理系统专业:网络工程(对口)班级:16(3)班姓名:代应豪指导教师:程庆成绩:计算机学院2017年4月25日目录1设计内容及要求.21.1设计内容.21.2设计任务及具体要求.22概要设计.32.1该系统的功能简介.32.2 总体程序框图.32.3各个模块之间的主要关系.43 3设计过程或程序代码.53.1各个模块的程序流程图及运行界面.53.2对关键代码加以分析说明.154程序调试分析.235小结.25致谢.26参考文献.27附:源程序.28511 设计内容及要求1.1设计内容图书管理系统主要根据课程设计要求进行设计,并了解了图书馆的各项流程,该系统功能主要包括8大模块:1)查阅图书,根据图书的书名查阅图书的基本信息。2)借阅图书,根据已经录入的卡号为准来借阅已存在的图书。3)增加图书,输入书号,书名、作者和是否借出的信息,可录入图书的信息。4)删除图书,输入准确无误的书名,若存在此书名则删除,不存在则不作任何操作。5)修改图书资料,输入书号,提示修改1:修改书的序号2:修改书名3:修改作者,选择其一即可修改。6)书籍统计,可输出所有书籍信息和总共的数量。7)学生管理部分,可细分为:申请卡号,删除卡号,借书统计,卡号统计申请卡号可创建一个新的可借用图书的卡号,删除卡号可删除已存在的卡号,卡号统计可输出所有卡号信息和总共数量。8)还书,输入卡号和所借的书名可将借出否的标识设置为1既未借出。1.2设计任务及具体要求主要利用c语言的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:查阅图书、借阅图书、增加图书、删除图书、修改图书信息、书籍统计输出、学生管理。操作界面要符合用户的一般习惯,图形或文本界面都可以。要求:明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识; 提高学生用高级语言进行程序设计的能力,重点提高用C语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤; 提高撰写技术文档的能力。2 概要设计2.1系统的功能简介该系统的主要功能是实现图书等信息的录入、查询,包括(录入、查询图书的基本信息、录入、查询卡号的基本信息、修改图书资料等)。对的图书信息进行删除、修改、统计所有信息。图书管理系统2.2 总体程序框图管理系统借阅图书查阅图书退出系统还书模块图2.2-A总体程序管理系统学生管理系统书籍统计增加图书删除图书修改图书资料删除卡号卡号统计借书统计申请新卡图2.2-B 管理系统程序2.2各个模块之间的主要关系该程序的功能主要是实现图书管理信息的录入,并对图书的相应信息进行查询、录入以及修改。各个模块之间的关系是相互联系的,例如需要先输入卡号方可借阅书籍。首先,主函数包含了所有的子函数。主函数是整个程序的核心。子函数之间也是有联系的,对图书信息的操作、学生信息的操作都是在子函数中完成。因此对图书信息的管理是非常重要的。在图书信息的修改、删除、查询、统计有一对一的联系。3设计过程或程序代码3.1各个模块的程序流程图 1)主函数程序及运行界面void main() char ch1,ch2,ch3,ch4; do printf(tt请你选择操作类型:n); printf( 1:n); printf( 2:n); printf( 3:n); printf( 4:n); printf( 0:n); printf(请输入0-4n); scanf(%s,&ch1); switch(ch1) case 1:chabook();break; case 2:lendbook();break; case 3: do printf(-欢迎进入管理系统!-n); printf( 1:n); printf( 2:n); printf( 3:n); printf( 4:n); printf( 5:n); printf( 0:n); printf(请输入0-5,其他输入非法!n); scanf(%s,&ch2); switch(ch2) case 1:addbook(); break; case 2:delbook();break; case 3:changebook();break; case 4:bookcount();getch();break; case 5:do printf(-欢迎进入学生管理系统!-n); printf( 1:n); printf( 2:n); printf( 3:n); printf( 4:n); printf( 0:n); printf(请输入0-4,其他输入非法!n); scanf(%s,&ch4); switch(ch4) case 1:addcard();break; case 2:delcard();break; case 3:lendcount();break; case 4:cardcount();break; case 0:break; default:printf(无此操作n);getch();break; while(ch4!=0);break; case 0:break; default:printf(无此操作n);getch();break; while(ch2!=0);break; case 4:ReturnBook();break; case 0:break; default:printf(无此操作n);getch();break; while(ch1!=0); 图3.1-A主函数程序简单说明:该功能主要显示的是给用户一个进入界面,它主要的是显示该程序主要能够执行的有哪些功能。下面是显示给用户的界面。(见图3.1-A) 主函数程序运行界面:图3.1B主函数界面 2)查阅图书信息流程图以及运行界面开始输入书名: 输出未找到查找 Yes No输出图书信息图3.2-A查阅图书程序运行界面:该程序主要根据图书的书名,在表中循环查找与输入对应的表名,再打印出图书的基本信息。3)借阅图书流程图及程序运行界面开始输入卡号 输出未找到查找卡号 Yes No输出书名查找书名YesNo借阅失败借阅成功图3.3-A 该功能的主要内容是根据已有的卡号和书名来借阅图书。借阅图书的程序运行界面。(见图3.3-B)图3.3-B借阅图书程序界面4)系统管理的流程图及程序运行界面管理系统学生管理系统书籍统计增加图书删除图书修改图书资料删除卡号卡号统计借书统计申请新卡删除图书输入书名删除成功增加图书输入书号、书名、作者、借出否增加成功输入书名修改图书资料书籍统计输出统计数据选择修改删除项目输入相关信息输入卡号删除卡号删除成功申请卡号输入卡号、学生姓名、班级 申请成功借书统计卡号统计输出统计数据输出统计数据图3.4-A管理系统程序本程序是对图书管理的一个总体操作,有增加图书,删除图书,修改图书资料,书籍统计,以及学生管理下的申请新卡、删除卡号、结束统计、卡号统计主要界面增加图书删除图书修改图书资料书籍统计申请卡号删除卡号借书统计卡号统计图3.4-B程序界面 3.2对关键代码加以分析说明1)结构体定义struct student /*定义学生类型,用于存放借出的书籍*/ char cardnum10; char lendbook10; student1000; struct book /*定义书的类型*/ int booknum; char bookname10; char bookcreat10; int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/ book1000; struct card /*借书卡的数据类型*/ char cardnum10; char studentname10; int studentclass; card100;这是对学生类型和书籍的类型以及借书卡的数据类型进行定义,并且创建的相应的数据变量,其中在student结构体中,cardnum卡号,lendbook为借的书籍,在book结构体中,booknum为书号,bookname为书名,bookcreat为作者,tureflase为借出否。2)查阅图书void findbook() FILE *fp; char bookname10; int i; fp=fopen(book.txt,r); printf(请输入你要查找的书名n); scanf(%s,bookname); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(bookname,booki.bookname)=0) if(booki.turefalse=1) printf(这本书的详细资料是:%d %s %s 此书现在无人借阅n,booki.booknum,booki.bookname,booki.bookcreat); else printf(这本书已经有人借出n);fclose(fp);return; fclose(fp); return; printf(没有你要查询的书籍n); fclose(fp); return; 这段代码的功能是完成查阅图书信息,定义一个文件的指针变量,让其等于book这个文件并且为只读状态,输入书名,用fread()读取txt中的字节,如果有和输入的书名相同的字节且借出否为1,输入图书的详细信息,反之输出“这本书已经有人借出”,最后关闭fp所指向的txt文件3)删除卡号void delcard() FILE *fp,*fp2; int i; char cardnum10; char choice; fp=fopen(card.txt,r); fp2=fopen(bookl.txt,w); printf(请输入你要删除的卡号n); printf(如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动n); scanf(%s,&cardnum); for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+) if(strcmp(cardi.cardnum,cardnum) fwrite(&cardi,sizeof(struct card),1,fp2); fclose(fp); fclose(fp2); printf(是否真的要删除该卡?删除后该书籍的所有信息将无法恢复Y/Nn); scanf(%s,&choice); if(choice=y|choice=Y) fp=fopen(card.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&cardi,sizeof(struct card),1,fp2)!=0;i+) fwrite(&cardi,sizeof(struct card),1,fp); fclose(fp); fclose(fp2); fp2=fopen(bookl.txt,w); fclose(fp2); printf(按任意键返回n); getch(); return; else printf(按任意键返回n); getch(); return; 本程序的功能是在已有的卡号的基础上,删除指定的卡号,首先定义两个文件指针变量,使其为card.txt和book.txt,输入卡号fread读取文件中的字节,与输入的卡号作比较,如果找到了,用fwrite()函数写到用户空间的缓冲区,再次提示时候删除,如果是,使两个文件指针指向card.txt和book.txt,改写卡号后关闭文件fclose()生效。4设计结果与分析当把程序写好并进行调试时,并不是一帆风顺的,总会遇到很多在调试时遇到的错误。1. 首先在定义函数时,不能输入汉字。否则会程序会显示错误。2.在程序中,如果不在主函数上方定义的函数不事先声明会报错 3.变量在使用时分清指针形和普通类型4.调试的过程不可任意添加或删除,不然之后很难找到错误 5.在程序设计时要住提示语句,任意一个操作都要有执行语句6.如果程序在运行的过程中,对于一个循环语句,如果你返回的值始终是真的,那么程序将进如死循环。7.在定义变量时药分清类型,在程序写一般就不好做更改8.花括号要一一对应。5 小 结通过近几天的课程设计,对C语言有了进一步认识,通过查找资料学习了结构体、链表的基本结构,明白了主函数和其他函数的关系。对很多函数有了进一步认识,同时也学会了运用功能函数。在老师的指导下学会了对软件的基本操作。本次设计以图书管理系统为题目,对图书进行录入、删除、显示、修改等功能。在本次设计中主要应用了顺序表,解决了添加、删除图书的无序性。用结构体可以将不同类型的变量存储在相邻的存储单元中,解决了图书信息多、存储混乱的问题。拿到题目时,感觉很茫然,无从下手。通过从网上查阅相关资料,对图书管理系统有了一定的了解。经过参考课本,明白了函数的定义、使用,对图书管理系统的设计有了自己的想法,接下来开始对各个模块进行设计。在设计过程中遇到了相当大的问题,形参与实参的传递以及最后使用全局变量、数组的使用、结构体的定义使用都需要查询资料。当程序基本结束时,又遇到更大的麻烦,在程序运行中接二连三的出现问题,经过自己耐心的查找、修改,终于解决了麻烦,看到了希望。本次设计主要实现了图书的载入、删除、统计、修改等功能。书籍模块可以将最新信息录入图书库;删除书籍模块可以将过时书籍及时删除,以免影响管理员对图书库书籍的准确管理;统计书籍模块可以将图书库中所有信息显示在主界面,随时查阅当前图书库信息;修改书籍模块可以避免因输入错误信息而造成的失误。由于时间和自己的能力有限,只能实现比较简单的功能。本次设计没有实现对载入书籍信息的保存功能和按不同方式对图书查找的功能。这次课程设计使我受益匪浅,不但磨练了我对追求知识的毅力,而且增强了对以后学习的信心致谢在这次C语言课程设计中,我的老师和同学给了我及大的帮助。特别是我的指导老师熊茜老师,还有我的C语言任课老师代美丽老师。在此,我对他们表示感谢!感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同学!参考文献1谭浩强著.C程序设计(第二版).北京:清华大学出版社,19992数据结构.c语言 主编 王曙燕源程序#include #include #include #include #include #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 struct student /*定义学生类型,用于存放借出的书籍*/ char cardnum10; char lendbook10; student1000; struct book /*定义书的类型*/ int booknum; char bookname10; char bookcreat10; int turefalse; /*用于借书和还书模块判断一本书是否借出的条件*/ book1000; struct card /*借书卡的数据类型*/ char cardnum10; char studentname10; int studentclass; card100; void addbook();void addcard();void bookcount();void cardcount();void chabook();void changebook();void delbook();void delcard();void findbook();void lendbook();void lendcount();void ReturnBook();void main() char ch1,ch2,ch3,ch4; do printf(tt请你选择操作类型:n); printf( 1:n); printf( 2:n); printf( 3:n); printf( 4:n); printf( 0:n); printf(请输入0-4n); scanf(%s,&ch1); switch(ch1) case 1:chabook();break; case 2:lendbook();break; case 3: do / clrscr(); printf(-欢迎进入管理系统!-n); printf( 1:n); printf( 2:n); printf( 3:n); printf( 4:n); printf( 5:n); printf( 0:n); printf(请输入0-5,其他输入非法!n); scanf(%s,&ch2); switch(ch2) case 1:addbook(); break; case 2:delbook();break; case 3:changebook();break; case 4:bookcount();getch();break; case 5:do /clrscr(); printf(-欢迎进入学生管理系统!-n); printf( 1:n); printf( 2:n); printf( 3:n); printf( 4:n); printf( 0:n); printf(请输入0-4,其他输入非法!n); scanf(%s,&ch4); switch(ch4) case 1:addcard();break; case 2:delcard();break; case 3:lendcount();break; case 4:cardcount();break; case 0:break; default:printf(无此操作n);getch();break; while(ch4!=0);break; case 0:break; default:printf(无此操作n);getch();break; while(ch2!=0);break; case 4:ReturnBook();break; case 0:break; default:printf(无此操作n);getch();break; while(ch1!=0); void ReturnBook() /*还书函数*/ FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/ int i,n; char cardnum10; char lendbook10; printf(请你输入你的卡号n); scanf(%s,&cardnum); fp=fopen(card.txt,r); /*读取卡号记录*/ for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+) /*for循环判断卡号是否存在*/ if(strcmp(cardi.cardnum,cardnum) = 0 ) /*卡号存在,进入下一循环*/ n=i; fclose(fp); printf(请输入你要还的书的名字n); scanf(%s,lendbook); fp=fopen(record.txt,r); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) /*判断是否借阅了输入的书*/ if(strcmp(studenti.lendbook,lendbook)=0) /*借阅了该书,进入下一循环,否则出错显示*/ fclose(fp); fp=fopen(record.txt,r); fp2=fopen(bookl.txt,w); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) if(strcmp(studenti.lendbook,lendbook)=0) continue; /*删除还掉的书的借书记录*/ fwrite(&studenti,sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/ fclose(fp); fclose(fp2); fp=fopen(record.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&studenti,sizeof(struct student),1,fp2)!=0;i+) fwrite(&studenti,sizeof(struct student),1,fp); /*将借书记录信息写回*/ fclose(fp); fclose(fp2); fopen(bookl.txt,w); /*清临时文件的记录*/ fclose(fp2); fp=fopen(book.txt,r); fp2=fopen(bookl.txt,w); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/ if(strcmp(booki.bookname,lendbook) = 0) booki.turefalse=1; fwrite(&booki,sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/ continue; fwrite(&booki,sizeof(struct book),1,fp2); fclose(fp); fclose(fp2); fp=fopen(book.txt,w); fp2=fopen(bookl.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); fopen(bookl.txt,w); /*清临时文件*/ fclose(fp2); printf(还书完毕,按任意键返回n); getch(); return; printf(你没有借这样的书,不要耍我,任意键返回n); /*出错提示*/ fclose(fp); getch(); return; printf(系统没这样的卡,和管理员联系,按任意键返回n); /*出错提示*/ fclose(fp); getch(); void lendcount() FILE *fp; int i,n=0; fp=fopen(record.txt,r); for(i=0;fread(&studenti,sizeof(struct student),1,fp)!=0;i+) printf(卡号:%s 借出的书籍:%s n,studenti.cardnum,studenti.lendbook); n=n+1; fclose(fp); printf(目前共有%d本书借出n,n); printf(按任意键n); getch(); void chabook() char ch5; do printf(-欢迎进入图书查询系统!-n); printf( 1:n); printf( 0:n); printf(请输入0-2,其他输入非法!n); scanf(%s,&ch5); switch(ch5) case 1:findbook();getch();break; case 0:break; default:printf(无此操作n);getch();break; while(ch5!=0); void lendbook() FILE *fp,*fp2; int i,n; char cardnum10; printf(请你输入你的卡号n); scanf(%s,&cardnum); fp=fopen(card.txt,r); for(i=0;fread(&cardi,sizeof(struct card),1,fp)!=0;i+) if(strcmp(cardi.cardnum,cardnum) = 0) n=i; fclose(fp); printf(请输入你要借阅的书的名字n); scanf(%s,studentn.lendbook); fp=fopen(book.txt,r); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(booki.bookname,studentn.lendbook)=0) if(booki.turefalse=0) printf(对不起,此书有人借出,请借其他书n);fclose(fp);getch();return; else fclose(fp); fp=fopen(record.txt,a+); strcpy(studentn.cardnum,cardnum); fwrite(&studentn,sizeof(struct student),1,fp); fclose(fp); fp=fopen(book.txt,r); fp2=fopen(bookl.txt,w); for(i=0;fread(&booki,sizeof(struct book),1,fp)!=0;i+) if(strcmp(booki.bookname,studentn.lendbook)=0) booki.turefalse=0; fwrite(&booki,sizeof(struct book),1,fp2); continue; fwrite(&booki,sizeof(struct book),1,fp2); fclose(fp); fclose(fp2); fp=fopen(book.txt,w); fp2=fopen(bookl.txt,r); for(i=0;fread(&booki,sizeof(struct book),1,fp2)!=0;i+) fwrite(&booki,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年光伏电站智能化运维技术应用效果与运维智能化产业链报告
- 2025年安全教育培训考试应急救援知识试题库(附答案)
- 2025年新能源行业技术创新在新能源设备智能化创新中的技术突破报告
- 2025河北唐山曹妃甸唐海中医医院招聘考试参考题库及答案解析
- 2025年金华市婺城区第一人民医院招聘工作人员3人备考考试题库附答案解析
- 2025江西南昌市社会福利院面向社会招聘20人考试参考题库及答案解析
- 2025年合肥肥东县新安江路小学招聘教师补招考试参考题库及答案解析
- IT公司远程办公管理策略与实践
- 高三语文文言文教学设计与反思
- 物业维修保养合同范本
- 2025年山东高考真题化学试题(原卷版)
- 2025湖南湘潭市市直事业单位招聘(选调)工作人员48人考试参考试题及答案解析
- 第2课 教师节快乐 第2课时(课件)2025-2026学年道德与法治二年级上册统编版
- 2025年福建省福州市辅警考试题库(附答案)
- 2025年国家网络安全宣传周知识竞赛考试练习题库(完整版)含答案
- 铸牢中华民族共同体意识
- 绿化项目养护监理方案投标文件(技术方案)
- 科普短视频与新闻传播融合模式的研究
- 2025滨州市劳动合同范本(示范文本)
- 2025年教师资格证中学综合素质+教育知识与能力真题及答案
- 安徽省港航集团有限公司所属企业招聘笔试真题2024
评论
0/150
提交评论