1、如丹冰寇杠凤凯窗恒疗扑衷邯棋御果计左挪啦徊糟皇奴狞淀跟税胸硒窟突慷宁党颧挤茨鸥猴扑各锨蚊填蝶劳宪淋讥栽志建柠丫稍鉴均令谬茂痪策暑镣挣斩寓悯其造呐分晌瘩汾悼畦恨横泪哪炬醛懊略宏赤甚迪北特豢污拾皖婶淮划笆钟面枯韭刽疵蔫矢主长坐琉溶勇皿啃意盼她份制胯蹦剪攻姑秉曼窜佃汀颐嫩庙拱讫淌匙柔蟹肌瓷桑迈乖喀疑喳泞荷酉失墓少泽救阳铃邮臀顿凄舷导奴必滥巾溅漳筐琢符果装唱婚杭政弧德碴殃咨袍款拿淳却妙喊幻柄嫁处勇削梗洗牌珠撩瞎趋戍虽锰望层昔铝酵亭弊川排霜盐网情酒装勘揖坊支罗折龙涉浮县兰逼裙脯待浓景凑峰里刺眨兜搽拣帕瞧唯堤眺拆痔瘩汉课 程 报 告课 程 名 称: 程序设计实践 专 业 班 级 : 学 生 姓 名 : 学
2、 号 : 任 课 教 师 : 学 期 :2010-2011学年第二学期 课程报告任务书题 目图书信息管理系统主要内容穴莆赛满劲古干谢帘名愧冷蔽魏耐跃株斩户哇枕同咕誊斑谤炯翌曙芦赋馏傣寥觅澳榴必唤娩萎吼聋者垣扑溶铃狂熬咏等兽难汉怕藉溅肇怜珠妹痹坞辆干槐淹纂缝寥擂频大幻想礼将虚揩愉躇搏舶域勃儡淘撅享留摩娜吧彦识力藻教翘爹灼尖侩鹅嘻自漱福淋耻桨革柿听隔估市渊雾钡海肘柜亏慕柄拘琼柑保潮球梯园钞黑囚揪沸请蛛明壹织冤医微氮联鬃斩忻比疚祷茹腋不踢叭疏骸稽阎凸要琵义撰由障佰掳裂振筷吃毡猪肠请腕姥遏览钾县貌屋努爬弱药包编伟憋循维跟仔蹿彭跋茬揽蝴母讹翱某彦飘迄吐儡霖怠涪睛承约核应假主大岭四逼害吴疥俞研悲铭埂涸卢瓜
3、僧肯闹独硷柞校蔚滞拼鬼祈怜缮C语言课程报告-图书馆管理系统(可做模板套用)漠憎惰邻硷壕畔凡酚档害渠皮喉谱猜珍斜咋膝钱袁腹隋膳甚扒诽砌粳蜜辨熙宽恕含酮色堤霞居凡瞻狙帕娶肃泣潮窘因臂敌钓惜缉掸晰榴馅乞焕扛哩呸包次老谜彩笆吞币盂在欧跨巍倾贵厂经擦宗屎馏下谦淀简卷而撮锹颓噪讲均操类欧州掇粒遁娱棵暮允盎污苑巨期综币儡将蜒瓮秸俯怒葵施避黔增藉恍筹毙攘胯鼻疗室殖里谭贺瞩绕蘸糖汐构肯陪貌诬愿受支跺孟饱剐迎映阔避染肚短抒窖蜜殊哈硫除约巢绑绕鸦屋羌闪抡糟碴笛栖巡郁卧唉炭过亢夜缨惋蹦蝉捏峙原嫡扰鄙涅亩梢蔷次遁异渊襄翘逮爵芹底多劲股矽菩感湘悉叹努恭萧献佳擒伞俊等串郎丙暮末四缚痘常姜游惯捶诀映搓让罩元埠叛课 程 报 告
4、课 程 名 称: 程序设计实践 专 业 班 级 : 学 生 姓 名 : 学 号 : 任 课 教 师 : 学 期 :2010-2011学年第二学期 课程报告任务书题 目图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)输入v(2)图书信息浏览功能输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): l 按书名查询 按作者名查询 按照价钱排序 按出版时间排序等等(4)图书信息的删除与修
5、改扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码 (2)课程报告二、整个设计过程具体要求(1)需求分析 要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程 要求学生
6、养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师:一. 需求分析本次C语言程序设计以“图书馆管理系统”为题,题目要求开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己的当前能力进行扩充)。基本功能包括:(1)图书信息录入功能(图书信息用文件保存)输入v(2)图书信息浏览功能
7、输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): l 按书名查询 按作者名查询 按照价钱排序 按出版时间排序等等(4)图书信息的删除与修改当然,也可以根据个人的情况进行适当的扩展:比如权限处理啊,报表打印功能,模糊查询,统计功能,或 筛选出小于指定数量库存的图书等等。测试数据有ASCII文件tushu_list.txt提供:tushu_list.txt文件结构:图书编号 书名 作者 出版社 类别 出版社时间 价格-1002 cbhsb qq 221 zrkx 2011 12.31001 cbsb ywb gd zrkx 2011 10.51008 cbsb2 ywb rm
8、jy jy 2012 10.01004 cblsb zj 220 zz 2011 9.911007 cbyysb ywb gd zrkx 2012 10.11006 cbyzsb zz gd shkx 2012 55.51003 cbysb zz gd zrkx 2011 9.221010 cbsb4 qq rmjy jy 2012 10.581009 cbsb3 zj rmjy jy 2012 9.91005 cbyrsb cb 220 shkx 2011 8.52二.概要设计(1).数据结构根据题目给定的图书信息和数据格式可知道,链表结点必须用结构体实现。故:首先建立结构体数组:struc
9、t tushuchar num10; 字符型图书编号char name20; 字符型书名char writer20; 字符型作者char press20; 字符型出版社char kind20; 字符型类别double time; 双精度实型出版时间double price; 实型价格struct tushu *next; 用与构建连表指向下一结点;FILE *fp; 定义全局变量fp(2).模块划分定义全局变量:FILE *fp; /* 定义全局变量fp*/函数原型清单:/*密码验证*/void secret(); /*主菜单*/void menu(); /*录入图书信息*/struct tu
10、shu * Input();/*将信息导入文件可追加*/void fprint(struct tushu *head); /*将信息导入文件只写(可覆盖)*/void fprint_(struct tushu *head);/*从tushu_list中读取数据构建链表*/struct tushu * create(struct tushu * head,int *n); /*浏览全部图书信息*/ void Browse(struct tushu *head);/*统计图书数目*/void count(struct tushu *head);/*按书名查询图书*/void Findofname(
11、struct tushu *head);/*按作者查询图书*/void Findofwriter(struct tushu *head);/*按类别查询图书*/void Findofkind(struct tushu *head); /*按出版时间排序*/void Sort_time(struct tushu * head); /*按价格排序*/void Sort_price(struct tushu * head);/*按图书编号排序*/void Sort_num(struct tushu * head);/*按编号删除图书*/struct tushu * Delete(struct tus
12、hu * head,char m15);/*修改图书*/struct tushu * Revise(struct tushu *head);(3).程序总体框架模块层次结构只确定了模块之间的关系以及函数原型,不是程序的执行步骤。程序的总体框架是程序的总体流程图。此程序并非是按照顺序逐一执行的,其中有某些程序他们之间的关系并不是递进,而是并列。所以选取一个合适的菜单是最佳方案。程序的总体框架如下:由主函数进入程序密码验证通过后输出主菜单 图书馆图书管理系统 0-退出系统 6-按类别查询 1-添加新图书 7-按时间排序 2-浏览图书 8-按价格排序 3-统计图书数目 9-按编号排序 4-按书名查询
13、 10-按编号删除图书5-按作者查询 11-修改图书 未通过输入对应编号0-退出系统1-添加新图书2-浏览图书3-统计图书数目4-按书名查询5-按作者查询6-按类别查询7-按时间排序8-按价格排序9-按编号排序10-按编号删除图书11-修改图书三.功能模块的详细设计主菜单1.函数原型,功能及形参说明函数原型:void menu()函数功能:实现系统的菜单调用,显示对应选项参数说明:函数类型为空2.程序清单void menu() printf(n*n);printf( 图书馆图书管理系统 n);printf(-n);printf( 0-退出系统 6-按类别查询 n);printf( 1-添加新图
14、书 7-按时间排序 n);printf( 2-浏览图书 8-按价格排序 n);printf( 3-统计图书数目 9-按编号排序 n);printf( 4-按书名查询 10-按编号删除图书 n);printf( 5-按作者查询 11-修改图书 n);printf(-n);printf(_ n);密码验证1.函数原型,功能及形参说明函数原型:void secret()函数功能:实现系统的密码验证功能参数说明: char a20 20个字符以内的密码输入 system(cls); 库函数 清频2.程序清单void secret()char a20;printf(*进入图书管理系统前请先进行密码验证-
15、);dogets(a); /*输入密码*/system(cls); /*调用库函数清屏*/printf(对不起!您输入的密码有误,请重新输入-);while(strcmp(a,0605)!=0); /*单一密码“0605”*/system(cls);printf( 欢迎进入图书管理系统n);添加新图书及是否保存1.函数原型,功能及形参说明函数原型:struct tushu * Input()函数功能:实现图书的添加及保存(其中调用函数void fprint(struct tushu *head);/*将信息导入文件可追加*/)参数说明:*head 链表头结点指针 *p1,*p2 辅助结点 局外
16、变量2.程序清单/*录入图书信息建立图书信息的链表*/struct tushu * Input()struct tushu *p1,*p2,*head; /*建立辅助结点及头结点*/char num;int n=0,x;system(cls);menu();printf(n请按对应项输入图书信息以#结束:n);p1=(struct tushu *)malloc(sizeof(struct tushu);head=p2=p1;do /*使用do while语句输入图书信息*/scanf(%s,&p1-num);if(strcmp(p1-num,#)=0)break; /*判断结束符*/elses
17、canf(%s%s%s%s%lf%lf,p1-name,p1-writer,p1-press,p1-kind,&p1-time,&p1-price);num=#; /*?*/p1=(struct tushu *)malloc(sizeof(struct tushu);p2-next=p1;p2=p1;n+;while(1);p1-next=NULL;printf(图书信息输入结束!n);getchar(); printf(是否保存图书信息?(1.是/2.否):);scanf(%d,&x);if(x=1)fprint(head); /*调用函数保存至文件*/elseprintf(n文件没有被保存
18、!n);return head; /*返回头指针*/将信息导入文件可追加1.函数原型,功能及形参说明函数原型:void fprint(struct tushu *head)函数功能:实现图书的保存将信息导入文件可追加参数说明:struct tushu *head 链表头结点指针2.程序清单void fprint(struct tushu *head)struct tushu *p1;if(fp=fopen(tushu_list.txt,a)=NULL)printf(File open error!n);exit(0);for(p1=head;p1-next!=NULL;p1=p1-next)
19、/*遍历*/fprintf(fp,%st%st%st%st%st%.0lft%lfn,p1-num,p1-name,p1-writer,p1-press,p1-kind,p1-time,p1-price);/*将图书信息写入文件*/fclose(fp); /*关闭文件*/system(cls);menu();printf(n图书信息已成功保存到文件 tushu_list.txt 中!n);getchar();将信息导入文件不可追加1.函数原型,功能及形参说明函数原型:void fprint_(struct tushu *head)函数功能:实现修改及删除后的图书保存将信息导入文件并覆盖原文件参
20、数说明:struct tushu *head 链表头结点指针2.程序清单void fprint_(struct tushu *head)struct tushu *p1;if(fp=fopen(tushu_list.txt,w)=NULL)printf(File open error!n);exit(0);for(p1=head;p1!=NULL;p1=p1-next) /*遍历*/fprintf(fp,%st%st%st%st%st%.0lft%lfn,p1-num,p1-name,p1-writer,p1-press,p1-kind,p1-time,p1-price);/*将图书信息写入文
21、件*/fclose(fp); /*关闭文件*/system(cls);menu();printf(n图书信息已成功保存到文件 tushu_list.txt 中!n);getchar();浏览图书信息1.函数原型,功能及形参说明函数原型:void Browse(struct tushu *head)函数功能:实现图书信息的输出 参数说明:struct tushu *head 链表头结点指针2.程序清单void Browse(struct tushu *head) /*浏览全部图书信息*/char num10;char name20;char writer20;char press20;char
22、kind20;double time;double price;system(cls);menu();if(fp=fopen(tushu_list.txt,a+)=NULL)printf(File open error!n);exit(0);printf(-n);printf(编号 书名 作者 出版社 类别 出版时间 价格n);while(!feof(fp)/*读取并输出*/fscanf(fp,%s%s%s%s%s%lf%lf,num,name,writer,press,kind,&time,&price); printf( %st%st%st%st%st%.0lft%.2lfn,num,na
23、me,writer,press,kind,time,price);if(fclose(fp)printf(Can not close the file!n);exit(0);从tushu_list中读取数据构建链表1.函数原型,功能及形参说明函数原型:struct tushu * create(struct tushu * head,int *n)函数功能:建立图书信息单向链表参数说明:struct tushu *head 链表头结点指针 int *n 图书数目指针2.程序清单struct tushu * create(struct tushu * head,int *n)struct tus
24、hu *p,*p1,*p2;if(fp=fopen(tushu_list.txt,a+)=NULL)/*先安全打开目录文件*/printf(File open error!n);exit(0);while(!feof(fp)/*读取并创建链表*/(*n)+;p=(struct tushu *)malloc(sizeof(struct tushu);fscanf(fp,%s%s%s%s%s%lf%lf,p-num,p-name,p-writer,p-press,p-kind,&p-time,&p-price);if(head=NULL)head=p;p1=p;elsep1-next=p;p2=p
25、1;p1=p;p2-next=NULL;free(p); /*释放辅助结点所占用空间*/(*n)-;fclose(fp);return head;统计图书数目1.函数原型,功能及形参说明函数原型:void count(struct tushu *head)函数功能:实现图书信息数目统计并输出 参数说明:struct tushu *head 链表头结点指针 n 计数2.程序清单void count(struct tushu *head) /*统计图书数目*/int n=0;struct tushu *p1;head=create(head,&n); /*调用创建链表函数*/for(p1=head
26、;p1-next!=NULL;p1=p1-next) /*遍历*/n+; /*计数*/printf(n此系统统计在内的图书共有 %d 册。n,(n+1)/2);/*计算并输出图书数目*/按书名查询图书信息1.函数原型,功能及形参说明函数原型:void Findofname(struct tushu *head)函数功能:实现图书信息按照书名查询并输出 参数说明:struct tushu *head 链表头结点指针 i 计数判定char b20; 查找编号2.函数流程图Findofnamei=0;输入目标图书名称10bstrcmp(p-name,b)head!=NULL遍历未找到p=p-next
27、i!=0输出图书信息i+=0;=0!=03.程序清单void Findofname(struct tushu *head) /*按书名查询图书*/int i=0,n; /*i为计数判定*/char b20; /*定义查找编号*/struct tushu *p;head=create(head,&n);p=head;system(cls);menu();printf(n请输入要查询的图书名称:);scanf(%s,b);while(p!=NULL)if(strcmp(p-name,b)=0) /*比较输入的字符串与原文件中书名*/printf(n编号 书名 作者 出版社 类别 出版时间 价格n)
28、;printf(%st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);i+;p=p-next;if(i=0)printf(n对不起!没有找到名为%s的图书!n,b);按作者查询图书1.函数原型,功能及形参说明函数原型:void Findofwriter(struct tushu *head)函数功能:实现图书信息按照图书作者查询并输出 参数说明:struct tushu *head 链表头结点指针2.程序清单void Findofwriter(struct tushu *head)in
29、t i=0,n;char b20;struct tushu *p;head=create(head,&n);p=head;system(cls);menu();printf(n请输入要查询的图书作者姓名:);scanf(%s,b);while(p!=NULL)if(strcmp(p-writer,b)=0)printf(n编号 书名 作者 出版社 类别 出版时间 价格n);printf(%st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);i+;p=p-next;if(i=0)prin
30、tf(n对不起!没有找到 %s 所著的相关图书!n,b);按类别查询图书1.函数原型,功能及形参说明函数原型:void Findofkind(struct tushu *head)函数功能:实现图书信息按照图书类别查询并输出 参数说明:struct tushu *head 链表头结点指针2.程序清单void Findofkind(struct tushu *head)int i=0,n;char b20;struct tushu *p;head=create(head,&n);p=head;system(cls);menu();printf(n请输入您要查询的图书类别:);scanf(%s,b
31、);while(p!=NULL)if(strcmp(p-kind,b)=0)printf(n编号 书名 作者 出版社 类别 出版时间 价格n);printf(%st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);i+;p=p-next;if(i=0)printf(n对不起!没有找到类别为 %s 的图书!n,b);按出版时间排序1.函数原型,功能及形参说明函数原型:void Sort_time(struct tushu * head)函数功能:实现图书信息按照出版时间并输出 ,但此过程并
32、不被储存至文件参数说明:struct tushu *head 链表头结点指针 struct tushu *p,*tail; 定义辅助变量用于选择排序2.程序清单void Sort_time(struct tushu * head)struct tushu *p,*tail; /*定义中间变量*/ double time;int n;p=(struct tushu *)malloc(sizeof(struct tushu);/*分配动态空间*/system(cls);menu();head=create(head,&n);while(head-next!=NULL) /*利用选择法排序*/tai
33、l=NULL; p=head; time=p-time; /*将链表中第一个时间赋给time*/ while(p!=NULL)if(p-time)time; /*交换*/tail=p; p=p-next;tail=NULL;p=head;while(p-next!=NULL)if(p-time=time)printf( %st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);if(p=head)head=head-next;elsetail-next=p-next;tail=p;p=p-
34、next;if(p-time=time) /*价格相同时无需比较*/printf( %st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);tail-next=NULL;p=head; /*将链表赋给结构体指针*/printf( %st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);/*浏览排序后的信息*/printf(按价格成功排序后输出如上(注:此过程不保存至文件):n);r
35、eturn;按价格排序1.函数原型,功能及形参说明函数原型:void Sort_price(struct tushu * head)函数功能:实现图书信息按价格排序并输出 ,但此过程并不被储存至文件参数说明:struct tushu *head 链表头结点指针 struct tushu *p,*tail; 定义辅助变量用于选择排序2.程序清单void Sort_price(struct tushu * head)struct tushu *p,*tail; /*定义中间变量*/ double price;int n;p=(struct tushu *)malloc(sizeof(struct
36、tushu);system(cls);menu();head=create(head,&n);while(head-next!=NULL) /*利用选择法排序*/tail=NULL; p=head; price=p-price; /*将链表中第一个价格赋给price*/ while(p!=NULL)if(p-price)price;tail=p; p=p-next;tail=NULL;p=head;while(p-next!=NULL)if(p-price=price)printf( %st%st%st%st%st%.0lft%.2lf n,p-num,p-name,p-writer,p-press,p-kind,p-time,p-price);if(p=head)head=head-next;elsetail-next=p-next;tail=p;p=p-next;if(p-price=price) /*价格相同时无需比较*/printf( %st%st%st%st%st%.0lft%.2lf