1、c语言课程设计图书信息管理系统c语言课程设计图书信息管理系统课程:高级语言程序设计学号: 1010431059 姓名: 胡维维 班级: 嵌入式一班 教师: 王群芳 时间: 2011年6月 计算机科学与技术系 1. 设计名称:图书信息管理系统设计 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能: 1、图书信息录入功能 2、图书信息浏览功能 3、图书信息查询功能 查询方式:按书名查询、按作者名查询、条件组合查询 4、图书信息的删除功能 5、图书信息的修改功能 图书信息用文件保存。 设计目的与要求: 目的:设计一个图书馆信息管理系
2、统的程序,能分别实现图书信息的录入、浏览、查询、删除以及修改的功能。根据用户需求,选择相应的功能,通过程序实现该功能。 要求:所设计的程序简洁,能实现个功能,且效率高。 设计所用软件环境:windows XP ,(, 问题的模型化描述及求解算法的简要描述: 1.系统结构如下: 图书信息 管理系统 信信信信信息息息息息录浏查删修览 询 除 改 入 按(姓名按按(姓名+作者) 姓+类型) 名 系统各模块说明如下: (1)信息输入模块:完成图书信息的输入功能,输入信息包括书名、作者名、分类号、出版单位、出版时间、价格等; (2)信息浏览模块:完成已录入图书信息的显示; (3)信息查询模块:完成图书信
3、息的查询,查询时对应有按书名查询和按作者名查询以及组合查询三种方式; (4)信息修改模块完成图书信息的修改功能; (5)信息删除模块完成图书信息的删除功能; (6)菜单选择模块完成用户命令的接收,此模块也是图书信息信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能; 2、数据结构 本系统中主要的数据结构就是图书的信息,包含书名、作者名、分类号、出版单位、出版时间、价格等;在处理过程中各项可以作为一本图书的不同属性来进行处理。 3、程序流程 系统的执行应从功能菜单的选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择
4、做出判断及异常处理。系统的流程图如下: 开始 菜单 否 否 输入 否 否 查询 是 浏览 是 修改 删除 是 是 是 按按 否 书作名 按者条信息修改 名 信息 信息浏览 件信息删除 输入 组合 结束 注:条件组合查询按书名和价格组合查询,修改删除按书名查找结构体修改删除。 程序清单: #include /输入输出函数 #include /字符串函数头文件 #include #include /调用函数 #include /申请内存 #define MAXNAME 11 /书名最大长度 #define MAXwriter 21 #define MENU_COUNT 5 /菜单选项个数 #def
5、ine MAXN 15 /自定义枚举类型fi_type,用来表示图书信息 typedef enum _fi_type news=1, /图书信息 fi_type; /图书信息结构体 struct fi_info char nameMAXNAME; char writerMAXwriter; int typenum; char publish_fromMAXN; int publish_time; float price; fi_type type; struct fi_info* next; /结构体的指针域,用于存放链表的下个结点的地址 ; struct fi_info *head=NULL
6、,*head_=NULL ; /将图书信息写成链表,头指针分别为空 int Book_num; /图书信息的统计数 void menu(); int ReadinfoFromFile(); /读入数据 /函数申明 int creat_news(); void search_news(); void delete_news(); void update_news(); void show(); void quit(); int main() int selected=0,land_num; /菜单选择变量 ReadinfoFromFile();/数据导入 printf(请输入您的图书管理系统登录
7、号:); scanf(%d,&land_num); while(selected=0&selected请选择要进行的操作(%d_%d):,0,MENU_COUNT); if(scanf(%d,&selected)!=1|selectedMENU_COUNT) printf(输入有误!请选择(%d-%d)之间的数字!按任意键重试.,0,MENU_COUNT); fflush(stdin); /清空输入缓冲区 getchar(); else switch(selected) case 1:creat_news();break; case 2:search_news();break; case 3:
8、delete_news();break; case 4:update_news();break; case 5:show();break; case 0:quit(); selected=0; return 0; int ReadinfoFromFile() /读入数据 FILE *fp=NULL; /文件指针 struct fi_info *p=NULL; /结构体指针 int i; if(fp=fopen(sun.txt,r+)=NULL) printf(文件不存在n); fp=fopen(sun.txt,w); /为输出打开一个文件 printf(文件建立成功n); fscanf(fp,
9、%d,&Book_num); /从文件中分别读入图书信息统计数,以便于下面for循环的条件控制 for(i=0;iname); fscanf(fp,%s,p-writer); fscanf(fp,%d,&p-typenum); fscanf(fp,%s,p-publish_from); fscanf(fp,%d,&p-publish_time); fscanf(fp,%f,&p-price); fscanf(fp,%d,&p-type); if(p-type=1) if(head=NULL) head=p; p-next=NULL; else p-next=head; head=p; else
10、 if(head_=NULL) head_=p; p-next=NULL; else p-next=head_; head_=p; fclose(fp); return 0; void menu() printf(nn*图书信息管理系统*n); printf(ttt 1;录入图书信息n); printf(ttt 2;查找图书信息n); printf(ttt 3;删除图书信息n); printf(ttt 4;修改图书信息n); printf(ttt 5;显示图书信息n); printf(ttt 0;退出 n); int creat_news() /添加图书信息 struct fi_info *p
11、=NULL; p=(struct fi_info*)malloc(sizeof(struct fi_info); printf(请输入书名:); scanf(%s,p-name); printf(请输入作者名:); scanf(%s,p-writer); printf(请输入分类号:); scanf(%d,&p-typenum); printf(请输入出版单位:); scanf(%s,p-publish_from); printf(请输入出版时间:); scanf(%d,&p-publish_time); printf(请输入书本价格:); scanf(%f,&p-price); p-type
12、=news; Book_num+=1; p-next=head; head=p; return 0; void search_news() /查询图书信息 struct fi_info *p=NULL; char name10,writer21; int price; int b=1,i; printf(按书名查找请按1.n按作者名查找请按2.n按组合查询请按3.n); scanf(%d,&i); if(i=1) printf(请输入要查找的书名:); scanf(%s,name); for(p=head;p!=NULL;p=p-next) /一个链表指针p的遍历,直到结尾p=NULL if(
13、strcmp(name,p-name)=0) /字符串的比较函数,若前后相等则等于0 b=0; /若存在,则b=0 printf(你找到了要查找的图书信息:n); printf(%sn,p-name); printf(%sn,p-writer); printf(%dn,p-typenum); printf(%sn,p-publish_from); printf(%dn,p-publish_time); printf(%fn,p-price); if(head=NULL) printf(没有此图书信息n); if(b) printf(你要查找的图书信息不存在!n); /若b=1,则不存在 els
14、e if(i=2) printf(请输入要查找的作者名:); scanf(%s,writer); for(p=head;p!=NULL;p=p-next) /一个链表指针p的遍历,直到结尾p=NULL if(strcmp(writer,p-writer)=0) /字符串的比较函数,若前后相等则等于0 b=0; /若存在,则b=0 printf(你找到了要查找的图书信息:n); printf(%sn,p-name); printf(%sn,p-writer); printf(%dn,p-typenum); printf(%sn,p-publish_from); printf(%dn,p-publ
15、ish_time); printf(%fn,p-price); if(head=NULL) printf(没有此图书信息n); if(b) printf(你要查找的图书信息不存在!n); /若b=1,则不存在 else if(i=3) printf(请输入要查找的 书名 价格n:); scanf(%s %d,name,&price); for(p=head;p!=NULL;p=p-next) /一个链表指针p的遍历,直到结尾p=NULL if(strcmp(name,p-name)=0&price=p-price) /字符串的比较函数,若前后相等则等于0 b=0; /若存在,则b=0 prin
16、tf(你找到了要查找的图书信息:n); printf(%sn,p-name); printf(%sn,p-writer); printf(%dn,p-typenum); printf(%sn,p-publish_from); printf(%dn,p-publish_time); printf(%fn,p-price); if(head=NULL) printf(没有此图书信息n); if(b) printf(你要查找的图书信息不存在!n); /若b=1,则不存在 else printf(提醒:没有该功能选项,请重新选择:n); system(PAUSE); /暂停 void delete_n
17、ews() /删除图书信息 struct fi_info *p=NULL; /定义两个结构体指针 struct fi_info *q=NULL; char name10; int b=1; int a; printf(请输入要删除的书名:n); scanf(%s,name); for(p=head,q=head;p!=NULL;p=p-next) if(strcmp(name,p-name)=0) b=0; printf(确定删除? 0(是) or 1(否)n); scanf(%d,&a); if(a=0) if(p=head) head=head-next; else q-next=p-ne
18、xt; printf(删除成功n); else q=p; if(b) printf(提示:查不到图书信息n); system(PAUSE); void update_news() /修改图书信息 struct fi_info *p=NULL; int a,b=1; char name10; printf(请输入书名:nn); scanf(%s,name); for(p=head;p!=NULL;p=p-next) if(strcmp(p-name,name)=0) b=0; printf(%sn,p-name); printf(%sn,p-writer); printf(%dn,p-typen
19、um); printf(%sn,p-publish_from); printf(%dn,p-publish_time); printf(%fn,p-price); printf(是否确定修改, 0 (是)or 1(否)n); scanf(%d,&a); if(a=0) printf(*请重新输入信息*n); printf(请输入书名:); scanf(%s,p-name); printf(请输入作者名:); scanf(%s,p-writer); printf(请输入分类号); scanf(%d,&p-typenum); printf(请输入出版单位:); scanf(%s,&p-publis
20、h_from); printf(请输入出版时间:); scanf(%d,&p-publish_time); printf(请输入书本价格:); scanf(%f,&p-price); p-type=news; printf(nn 提醒:您修改成功!nn); if(b=1) printf(没有您要修改的信息n); system(PAUSE); void show() /显示图书信息 struct fi_info *p=NULL; system(cls); for(p=head;p!=NULL;p=p-next) printf(%sn,p-name); printf(%sn,p-writer);
21、printf(%dn,p-typenum); printf(%sn,p-publish_from); printf(%dn,p-publish_time); printf(%fn,p-price); system(PAUSE); void quit() /退出系统 退出先保存 FILE *fp=NULL; struct fi_info *p=NULL; system(cls); fp=fopen(sun.txt,w); fprintf(fp,%d ,Book_num); for(p=head;p!=NULL;p=p-next) fprintf(fp,%s ,p-name); fprintf(f
22、p,%sn ,p-writer); fprintf(fp,%d ,p-typenum); fprintf(fp,%s ,p-publish_from); fprintf(fp,%d ,p-publish_time); fprintf(fp,%f ,p-price); fprintf(fp,%d ,p-type); printf(n); printf(感谢使用本图书信息管理系统!n) ; printf(n); fclose(fp); exit(0); 程序运行结果: 设计总结和体会: 总结 1: 熟悉了链表,结构体,数组指针的知识,还自学了枚举类型以及文件部分。 2: 上机运行更加熟练,能及时地
23、修改语法及程序错误。 3: 团队合作很重要,我从搭档的身上学习了很多。 4: 对C语言的细节知识点及程序上机有了更深入的认识及了解。 体会:图书管理系统花了我将近整整三天的时间,前两天是构建框架,着手写源程序,效率有些低,第三天真的是一天都对着电脑,调试再调试,忘乎所有,心里想的都是程序代码。这样的投入与认真让我更加坚定了深入学习C语言以及自学C+等语言的兴趣,当程序没有错误并成功运行,我觉得什么付出都值得,不睡觉算什么,没有好好吃饭算什么,辐射算什么、。虽然最后的结果是写了两个源程序并成功运行,但还是觉得自己可以做的更好一点,至少在效率方面应该更高些。以后更要好好学习,打好稳固的基础,为梦想而奋斗 设计成绩: 教师签名: 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1