C语言大作业(图书管理)
- 格式:doc
- 大小:47.50 KB
- 文档页数:13
附件1:学号:00126《面向对象程序设计》大作业题目学生成绩管理系统学院文法学院专业教育学班级教育学1201姓名杨欣指导教师鄢红国2013 年12 月20 日目录一设计目的 (1)二大作业的内容 (2)三大作业的要求与数据 (3)四大作业应完成的工作 (4)五总体设计(包含几大功能模块) (5)六详细设计(各功能模块的具体实现算法——流程图) (6)七调试分析(包含各模块的测试用例,及测试结果) (7)八总结 (8)十参考资料 (9)一大作业的目的《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。
二大作业的内容对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。
假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
三大作业的要求与数据1、用C语言实现系统;2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:(1) 每一条记录包括一本图书的编号、书名、库存量(2) 图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录的输入。
)(3) 图书信息显示浏览功能:完成全部图书记录的显示。
(4) 查询功能:完成按书名查找图书记录,并显示。
C大作业图书馆管理系统《图书馆管理系统》大作业说明书学生姓名董勋凯学号 2412332 所属学院电信工程学院专业电气工程及其自动化班级电气123班组长董勋凯电信工程学院制目录摘要............................................. 错误!未定义书签。
1. 图书管理系统概述.............................. 错误!未定义书签。
1.1图书管理系统总体设计思想概述.................. 错误!未定义书签。
1.2总体设计流程图 ............................... 错误!未定义书签。
2. 图书管理系统详细设计.......................... 错误!未定义书签。
2.1C++中应用程序编程............................. 错误!未定义书签。
2.1.1结构体,存放书籍及借书信息.................. 错误!未定义书签。
2.1.2页头函数,能够经过参数menu_item,显示当前状态 .. 错误!未定义书签。
2.1.1主要功能函数源代码.......................... 错误!未定义书签。
2.2算法调试、测试过程中出现的问题及解决方案...... 错误!未定义书签。
2.2.1本系统调试过程中遇到问题:.................. 错误!未定义书签。
2.2.2本系统调试过程中遇到问题的原因:............ 错误!未定义书签。
2.2.3本系统调试过程中遇到问题的解决办法及步骤:.. 错误!未定义书签。
课程设计总结和体会............................... 错误!未定义书签。
主要参考资料..................................... 错误!未定义书签。
摘要随着计算机技术的不断应用和提高,计算机已经深入到社会生活的各个角落。
目录1、问题定义 (3)2、系统设计 (3)2.1 总体设计 (3)2.2 详细设计 (4)2.2.1数据结构设计 (4)2.2.2 主控main()函数执行流程 (5)2.2.3输入记录模块 (5)2.2.4输出记录模块 (5)2.2.5添加记录模块 (5)2.2.6删除记录模块 (6)2.2.7查询记录模块 (6)2.2.8函数功能描述 (6)3、系统实现 (7)3.1 编码 (7)3.1.1 程序预处理 (7)3.1.2 主函数main() (7)3.1.3 主菜单界面 (10)3.1.4 显示图书信息 (11)3.1.5增加图书信息 (11)3.1.6删除图书信息 (12)3.1.7查询图书信息 (14)3.2 测试与调试 (15)3.2.1 概述 (15)3.2.2 程序测试 (16)4、系统维护 (20)5、归纳总结 (20)5.1 开发经验 (20)5.2 实训中遇到的问题及解决方法 (20)5.3 设计中尚存的不足之处 (21)5.4 感想和心得体会 (21)图书管理02本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。
本程序中涉及结构体、单链表等方面的知识。
通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单链表存储结构实现对图书管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义创建一个图书信息管理系统。
假设系统中每本图书信息只包括编号、书名、作者名字、单价、出版社名字。
程序的运行效果如下图所示,选择菜单实现相应功能。
2、系统设计2.1 总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
C语言程序设计大作业设计报告一.设计方案本程序旨在用一个C语言程序实现简单的图书馆图书管理系统,程序包含平时的借书,还书,新书录入,查询功能,用简单明了的人机交互界面快速实现图书管理的目的。
二.模块说明及代码分析1.主函数:源代码:void main(){int a;printf("\n");printf("\n");printf(" ( ^_^ ) WELCOME!\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t〉〉-------------BJTU图书管理系统--------------〈〈");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");do {printf("1.借书 2.还书 3.新书录入4.查询 0.退出");printf("\n");printf("\n");printf("\n");printf("\n");printf("请选择序号:");scanf("%d",&a);switch(a){case 1:jieshu();break;case 2:huanshu();break;case 3:xinshu();break;case 4:chaxun();break;case 0:break;default:printf("请选择正确的序号!\n");printf("\n");}}while(a!=0);printf("谢谢使用图书管理系统!\n");}主函数提供人机交互界面,让操作者选择所需的操作项目,并有退出选项。
附件1:学号:0121213640126《面向对象程序设计》大作业题目学生成绩管理系统学院文法学院专业教育学班级教育学1201姓名杨欣指导教师鄢红国2013 年12 月20 日目录一设计目的 (1)二大作业的内容 (2)三大作业的要求与数据 (3)四大作业应完成的工作 (4)五总体设计(包含几大功能模块) (5)六详细设计(各功能模块的具体实现算法——流程图) (6)七调试分析(包含各模块的测试用例,及测试结果) (7)八总结 (8)十参考资料 (9)一大作业的目的《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。
二大作业的内容对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。
假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
三大作业的要求与数据1、用C语言实现系统;2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:(1) 每一条记录包括一本图书的编号、书名、库存量(2) 图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录的输入。
)(3) 图书信息显示浏览功能:完成全部图书记录的显示。
(4) 查询功能:完成按书名查找图书记录,并显示。
C语⾔⼤作业之图书管理系统的实现详程⽬录主要内容概要设计项⽬源码结构体登录界⾯函数选择界⾯函数操作界⾯函数添加函数查找函数删除函数借书管理函数信息储存函数还书函数修改函数添加借书函数查找借书函数借书管理函数主函数总结序时间在流去,我们在长⼤。
嗨,这⾥是狐狸~~今天是2022年的⼀⽉四⽇了,元旦⼩长假也过去了,新年新⽓象,新年新⽬标,我们要向前看,不要执意过去了,感谢过去,把握现在,展望未来,这是我们现在应该做的。
好了,废话不多说,今天我们分享⼀个系统,确实也有许久没有分享过系统了,今天就给⼤家详细讲⼀下这个图书管理系统吧。
主要内容开发⼀个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据⾃⼰情况进⾏扩充,⽐如是否借出、库存量等)。
使之能提供以下基本功能:(1)图书信息录⼊功能(图书信息⽤⽂件保存)--输⼊(2)图书信息浏览功能--输出(3)查询功能(⾄少⼀种查询⽅式)、排序功能(⾄少⼀种排序⽅式):(4)图书信息的删除与修改扩展功能:可以按照⾃⼰的程度进⾏扩展。
⽐如(1)简单的权限处理(2)报表打印功能(3)甚⾄根据⾃⼰情况,可以加上学⽣信息,并扩充为图书借阅系统。
(4)模糊查询(5)综合查询(6)统计功能⽐如统计处某⼀类别的图书信息或筛选出⼩于指定数量库存的图书信息等等。
概要设计1 图书录⼊可以录⼊图书名,作者,出版社,出版⽇期,价格!录⼊图书编号时函数就会判断此编号是否存在,若存在不能成功录⼊!2 图书浏览可以浏览全部图书!3 图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!模糊查询和关键字查询事通过⽐价字符串的相似度⽽实现的!4 修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提⽰⽤户是否调⽤图书查询来找到⾃⼰想要操作的图书的编号。
如果某⼀本图书已经被借阅那么⽤户就不能删除该图书!5 借阅图书通过学号和图书编号进⾏借阅!如果该学号是第⼀次借阅那么会提⽰⽤户输⼊⾃⼰的姓名,并存⼊student.txt,⽅便以后借阅与归还!6 归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!7 借阅查询可查询某个学⽣已借但未归还的图书!项⽬源码先建⽴结构体,定义结构体成员123456789101112131415161718192021222324252627282930typedef struct book/*图书结构体*/{char num[10]; /*书号*/char name[10]; /*书名*/char auth[10]; /*作者*/int count;int sum;}Book;typedef struct borrow/*借书结构体*/{char id[20];char user[20];char book[20];char bookid[20];struct borrow *next;}BBnode,*BBlink;struct user{char num[10];/* 学号 */char pass[15];char name[15];char sex[10];};typedef struct unode{struct user data;struct unode *next;}Unode,*Ulink;Unode *os;登录界⾯函数123456789101112131415161718int login(Ulink l){ /*****************登陆窗⼝初始化****************************/while(!flag){char User_id[10],password[10],tmp;int i=0;User_id[0]='\0';23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80textcolor(YELLOW);cputs("ESC = EXIT");textcolor(WHITE);textbackground(179);box(1,1,80,24);h_line(2,3,78);gotoxy(15,2);cputs("Login now please input the User__ID and Password");bar_(30,10,23,5,5);/******************账号过滤*********************/while(User_id[0]=='\0'){gotoxy(31,11);textcolor(YELLOW);textbackground(5);cputs("User__ID:");gotoxy(31,13);cputs("Password:");textbackground(179);textcolor(WHITE);gotoxy(28,7);cputs("please input the User__ID!");textbackground(179);textcolor(YELLOW);gotoxy(27,11);putch(272);gotoxy(27,13);putch(' ');gotoxy(40,11);tmp=getch();if(tmp==27){flg=27;return0;}while(tmp!='\r'&&i<=9&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57))) {textcolor(YELLOW);textbackground(5);putch(tmp);User_id[i]=tmp;i++;tmp=getch();if(tmp==27){flg=27;return0;}}User_id[i]='\0';}/**********************密码过滤****************************/while(password[0]=='\0'){gotoxy(28,7);textbackground(179);textcolor(WHITE);cputs(" input the password now ");textbackground(179);textcolor(YELLOW);gotoxy(27,13);putch(272);gotoxy(27,11);putch(' ');gotoxy(40,13);i=0;tmp=getch();if(tmp==27){flg=27;return0;858687888990919293949596979899100101102103104105106107108109110111112password[i]=tmp;i++;tmp=getch(); if(tmp==27) {flg=27;return 0;}}password[i]='\0';}/*************把账号和密码进⾏对⽐验证**************/if(!strcmp(User_id,"admin")&&!strcmp(password,"admin")){ return 2; }if(cmps(l,User_id,password)){return 1;}}}选择界⾯函数1234567891011121314151617181920212223void choose(){while(1){ textbackground(179);clrscr();gotoxy(33,2);textcolor(WHITE);cputs("Administrastor");textcolor(YELLOW);box(1,1,80,24);h_line(2,3,78);gotoxy(3,6);cputs(">>>er Management----------------------------<<<");gotoxy(3,10);cputs(">>>-------------------------2.Book Management----------------------------<<<"); gotoxy(3,14);cputs(">>>-------------------------3.Borrow Books-------------------------------<<<");gotoxy(30,22);textcolor(RED);cputs("Please Select");28293031323334353637383940414243444546474849505152if(flg=='3')borrow();if(flg==27){ flg=-1;return;}} }void admin(){while(1){choose(); if(flg=='1') bookss();if(flg=='2')users();if(flg=='3')borrow();if(flg==27){return;}}}操作界⾯函数1234567891011121314151617181920212223242526void user(Ulink h){int flag;BBlink l,p,r;/* 连表 */FILE *fp; /* ⽂件指针 */int count=0;l=(BBnode*)malloc(sizeof(BBnode));l->next=NULL;r=l;fp=fopen(bfile,"rb");if(fp==NULL){ fp=fopen(bfile,"wb");}while(!feof(fp)){ p=(BBnode*)malloc(sizeof(BBnode)); if(fread(p,sizeof(BBnode),1,fp)) /* 将⽂件的内容放⼊接点中 */ {p->next=NULL;r->next=p; r=p; /* 将该接点挂⼊连中 */ count++; }313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778textcolor(YELLOW);box(1,1,80,24);h_line(2,3,78); gotoxy(3,2); textcolor(RED);cputs("A.");textcolor(BLUE);cputs("my message "); textcolor(RED); cputs("B."); textcolor(BLUE);cputs("modyfy my message ");textcolor(RED); cputs("C."); textcolor(BLUE); cputs("my borrow ");textcolor(RED);cputs("D."); textcolor(BLUE); cputs("search book"); textcolor(YELLOW);gotoxy(50,50);flag=getch();switch(flag) { case 'a': show(os);break; /*************添加⽤户**********/ case 'b':Modify_user(h);Save(h); break;/*************删除⽤户**********/ case 'c': Myborrow(); break;case 'd':usersearch();break; case 27: return; } }}添加函数图书的添加,包括⽤户添加以及管理员添加16 7 8 9 1011 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63void add(blink l){Bnode *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;textcolor(RED);gotoxy(25,4);cputs("INPUT THE MESSAGE ABOUT BOOK"); gotoxy(31,10);textcolor(YELLOW);cputs("Book ID:");scanf("%s",num);p=(Bnode *)malloc(sizeof(Bnode));while(s){if(strcmp(s->data.num,num)==0){textcolor(WHITE);gotoxy(25,15);cputs("This ID:");printf("'%s'",num);cputs("is exist!");gotoxy(25,22);cputs("please Press any key to continue..."); gotoxy(255,252);getch();return;}s=s->next;}strcpy(p->data.num,num);gotoxy(31,12);textcolor(YELLOW);cputs("Input Book name:");scanf("%s",p->);gotoxy(31,14);cputs("input your Book auth:");scanf("%s",p->data.auth);gotoxy(31,16);cputs("input your Book count:");scanf("%d",&p->data.count);bookcount=p->data.count+bookcount;p->data.sum=0;p->next=NULL;r->next=p;r=p;gotoxy(30,22);textcolor(RED);cputs("Add Book Success ");getch();textcolor(YELLOW);}/*******管理员添加⽤户*******/void Add(Ulink l){Unode *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;6869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109textcolor(YELLOW);cputs("User ID:");scanf("%s",num);p=(Unode *)malloc(sizeof(Unode)); while(s){if(strcmp(s->data.num,num)==0){ gotoxy(25,15); cputs("This ID:"); printf("'%s'",num);cputs("is exist!");gotoxy(25,22); textcolor(RED); cputs("please Press any key to continue..."); gotoxy(255,252);getch();return;} s=s->next;}strcpy(p->data.num,num);gotoxy(31,12);textcolor(YELLOW);cputs("Input Password:");scanf("%s",p->data.pass);gotoxy(31,14);cputs("input your name:");scanf("%s",p->);gotoxy(31,16);cputs("input the sex:");scanf("%s",p->data.sex);p->next=NULL;r->next=p;r=p;gotoxy(30,22);cputs("Add User Success ");usercount++;getch();textcolor(YELLOW);}查找函数⽤户查找以及管理员查找123456712 13 14 15 16 17 18 19 20 21 22 23 2425 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69/*******管理员查找图书*******/void qur(blink l){int sel;char findmess[20];Bnode *p;if(!l->next){gotoxy(30,4);textcolor(WHITE);cputs("Not Find Bookdata");getch();return;}textcolor(RED);gotoxy(25,4);cputs("Please Select Search Type !"); gotoxy(10,8);textcolor(WHITE);cputs("1.Search by ID");gotoxy(10,10);cputs("2.Search by Name");gotoxy(10,12);cputs("Please Select 1 or 2:");scanf("%d",&sel);if(sel==1){gotoxy(36,8);textcolor(YELLOW);cputs("Input the search ID:");scanf("%s",findmess);p=locate(l,findmess,"num");if(p){gotoxy(36,12);textcolor(WHITE);cputs("Book ID:");printf("%s",p->data.num);gotoxy(36,14);textcolor(WHITE);cputs("Book Name:");printf("%s",p->);gotoxy(36,16);textcolor(WHITE);cputs("Book author:");printf("%s",p->data.auth);gotoxy(36,18);textcolor(WHITE);cputs("Book count:");printf("%d",p->data.count);getch();textcolor(YELLOW);gotoxy(30,21);74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 textcolor(RED);cputs("Not finde ");getch();}}else if(sel==2) /* 姓名 */{gotoxy(36,8);textcolor(YELLOW);cputs("Input the search name:");scanf("%s",findmess);p=locate(l,findmess,"name");if(p){gotoxy(36,12);textcolor(WHITE);cputs("Book ID:");printf("%s",p->data.num);gotoxy(36,14);textcolor(WHITE);cputs("Book Name:");printf("%s",p->);gotoxy(36,16);textcolor(WHITE);cputs("Book author:");printf("%s",p->data.auth);gotoxy(36,18);textcolor(WHITE);cputs("Book count:");printf("%d",p->data.count);getch();textcolor(YELLOW);}else{textcolor(RED);gotoxy(30,22);cputs("Not finde ");}}else{textcolor(RED);gotoxy(30,22);cputs("Error !!");getch();}}/*******⽤户查找图书*******/void usersearch(){int sel;char findmess[20];Bnode *p;blink l;/* 连表 */FILE*fp; /* ⽂件指针 */int count=0;Bnode *P,*r;l=(Bnode*)malloc(sizeof(Bnode));l->next=NULL;r=l;fp=fopen(file,"rb");if(fp==NULL){fp=fopen(file,"wb");}while(!feof(fp)){P=(Bnode*)malloc(sizeof(Bnode));if(fread(P,sizeof(Bnode),1,fp)) /* 将⽂件的内容放⼊接点中 */ {P->next=NULL;bookcount=bookcount+P->data.count;booksum=booksum+P->data.sum;136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 r->next=P;r=P; /* 将该接点挂⼊连中 */count++;}}fclose(fp); /* 关闭⽂件 */if(!l->next){gotoxy(30,4);textcolor(WHITE);cputs("Not Find Bookdata");getch();return;}textcolor(RED);gotoxy(25,4);cputs("Please Select Delete Type !"); gotoxy(10,8);textcolor(WHITE);cputs("1.Search by ID");gotoxy(10,10);cputs("2.Search by Name");gotoxy(10,12);cputs("Please Select 1 or 2:");scanf("%d",&sel);if(sel==1){gotoxy(36,8);textcolor(YELLOW);cputs("Input the search ID:");scanf("%s",findmess);p=locate(l,findmess,"num");if(p){gotoxy(36,12);textcolor(WHITE);cputs("Book ID:");printf("%s",p->data.num);gotoxy(36,14);textcolor(WHITE);cputs("Book Name:");printf("%s",p->);gotoxy(36,16);textcolor(WHITE);cputs("Book author:");printf("%s",p->data.auth);gotoxy(36,18);textcolor(WHITE);cputs("Book count:");printf("%d",p->data.count-p->data.sum); getch();textcolor(YELLOW);}else{gotoxy(30,22);textcolor(RED);cputs("Not finde ");getch();}}else if(sel==2){gotoxy(36,8);textcolor(YELLOW);cputs("Input the search name:");scanf("%s",findmess);p=locate(l,findmess,"name");if(p){gotoxy(36,12);textcolor(WHITE);cputs("Book ID:");printf("%s",p->data.num);198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 gotoxy(36,14);textcolor(WHITE);cputs("Book Name:");printf("%s",p->);gotoxy(36,16);textcolor(WHITE);cputs("Book author:");printf("%s",p->data.auth);gotoxy(36,18);textcolor(WHITE);cputs("Book count:");printf("%d",(p->data.count-p->data.sum)); getch();textcolor(YELLOW);}else{textcolor(RED);gotoxy(30,22);cputs("Not finde ");}}else{textcolor(RED);gotoxy(30,22);cputs("Error !!");getch();}}/*******图书查找*******/int cmpbook(blink l,char id[],char na[]){char findm[20];Bnode *p;if(!l->next){gotoxy(25,4);textcolor(RED);cputs("Not Find Book");getch();return0;}strcpy(findm,id);p=locate(l,findm,"num");if(p){strcpy(findm,na);p=locate(l,findm,"name");if(p){return1;}else{textcolor(RED);gotoxy(30,22);cputs("Book name is NULL ");getch();return0;}}else{gotoxy(30,22);textcolor(RED);cputs("Book id is NULL ");getch();return0;}260261262263264265266267268269270271272273274275276277278279280281282283284285286287}删除函数图书的删除12345678 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25void del(blink l){int sel;Bnode *p,*r;char findmess[20];if(!l->next){gotoxy(25,4);textcolor(RED);cputs("=====>not thing could delete!\n"); getch();return;}textcolor(RED);gotoxy(25,4);puts("Please Select Delete Type !");gotoxy(10,8);textcolor(WHITE);cputs("1.Delete by Book ID");26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 gotoxy(10,10);cputs("2.Delete by Book Name");gotoxy(10,12);cputs("Please Select 1 or 2:");scanf("%d",&sel);if(sel==1){gotoxy(36,8);textcolor(YELLOW);cputs("Input the delete ID:");scanf("%s",findmess);p=locate(l,findmess,"num");if(p){bookcount=bookcount-p->data.count; r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);gotoxy(30,22);textcolor(RED);cputs("Delete success!\n");textcolor(YELLOW);}else{textcolor(RED);gotoxy(30,22);cputs("Error !!");}}else if(sel==2){gotoxy(36,8);textcolor(YELLOW);cputs("Input the delete name:");scanf("%s",findmess);p=locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);gotoxy(30,22);textcolor(RED);cputs("Delete success!\n");bookcount--;textcolor(YELLOW);}else{gotoxy(25,18);cputs("Not find!!");}}else{textcolor(RED);gotoxy(30,22);cputs("Error !!");}getch();textcolor(YELLOW);}借书管理函数1234567 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56void borrow(){while(1){int flag;BBlink l,p,r;/* 连表 */FILE*fp; /* ⽂件指针 */int count=0;l=(BBnode*)malloc(sizeof(BBnode));l->next=NULL;r=l;fp=fopen(bfile,"rb");if(fp==NULL){fp=fopen(bfile,"wb");}while(!feof(fp)){p=(BBnode*)malloc(sizeof(BBnode));if(fread(p,sizeof(BBnode),1,fp)) /* 将⽂件的内容放⼊接点中 */ {p->next=NULL;r->next=p;r=p; /* 将该接点挂⼊连中 */count++;}borrowcount=count;}while(1){textbackground(179);clrscr();textcolor(YELLOW);box(1,1,80,24);h_line(2,3,78);gotoxy(3,2);textcolor(RED);cputs("B");textcolor(BLUE);cputs("orrow book ");textcolor(RED);cputs("R");textcolor(BLUE);cputs("eturn book ");textcolor(RED);cputs("S");textcolor(BLUE);cputs("earch borrow ");textcolor(YELLOW);printf("count: (borrow=%d)",borrowcount);textcolor(RED);gotoxy(50,50);flag=getch();switch(flag){case'b':Add_borrow(l);break; /*************添加⽤户**********/case'r':57585960616263646566676869707172Del_borrow(l);Save_borrow(l);break; case 's': Qur_borrow(l); break;case 27:return;}} }}信息储存函数图书信息的储存123456789101112131415161718192021222324252627282930313233343536*******借书信息保存*******/void Save_borrow(BBlink l){FILE* fp;BBnode *p; int flag=1,count=0; fp=fopen(bfile,"wb"); if(fp==NULL) {gotoxy(35,12);textcolor(RED); cputs("open error!"); exit(1); }p=l->next;while(p){ if(fwrite(p,sizeof(BBnode),1,fp)==1) {p=p->next;count++;} else {flag=0;break;}}if(flag){textcolor(RED);gotoxy(30,24); /*** printf("save success.(saved%d.)",count);**调试的时候⽤的*/}fclose(fp);}还书函数123456789101112 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56/* 还书的操作 */void Del_borrow(BBlink l){int sel;BBnode *p,*r;Bnode *L;char findmess[20];FILE*fp; /* ⽂件指针 */Bnode *P,*R,*Q;L=(Bnode*)malloc(sizeof(Bnode));L->next=NULL;R=L;fp=fopen(file,"rb");if(fp==NULL){fp=fopen(file,"wb");}while(!feof(fp)){P=(Bnode*)malloc(sizeof(Bnode));if(fread(P,sizeof(Bnode),1,fp)) /* 将⽂件的内容放⼊接点中 */ {P->next=NULL;R->next=P;R=P; /* 将该接点挂⼊连中 */}}fclose(fp); /* 关闭⽂件 */if(!l->next){gotoxy(30,4);textcolor(RED);cputs("not Book could Return!\n");getch();return;}textcolor(RED);gotoxy(25,4);puts("Please Select Return Type !");gotoxy(10,8);textcolor(WHITE);cputs("1.Return by Borrow ID");gotoxy(10,10);cputs("2.Return by book name");gotoxy(10,12);cputs("Please Select 1 or 2:");scanf("%d",&sel);if(sel==1){gotoxy(36,8);textcolor(YELLOW);cputs("Input the Borrow ID:");57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 scanf("%s",findmess);p=Locate_borrow(l,findmess,"num"); if(p){Q=locate(L,findmess,"num");if(Q){Q->data.sum=Q->data.sum-1; save(L);}r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);gotoxy(30,22);textcolor(RED);cputs("Return success!\n");borrowcount--;getch();textcolor(YELLOW);}else{gotoxy(30,22);textcolor(RED);cputs("Note find !!");getch();}}else if(sel==2){gotoxy(36,8);textcolor(YELLOW);cputs("Input the Book name:");scanf("%s",findmess);p=Locate_borrow(l,findmess,"book"); if(p){Q=locate(L,findmess,"name"); if(Q){Q->data.sum=Q->data.sum-1; save(L);}r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);gotoxy(30,22);textcolor(RED);cputs("Borrow success!\n");borrowcount--;getch();textcolor(YELLOW);}else{gotoxy(30,18);textcolor(RED);cputs("Not find!!");getch();}}else{gotoxy(30,22);textcolor(RED);cputs("Not finde !!");119120121122123124125126127128129130131132getch();}textcolor(YELLOW);}修改函数也分为⽤户和管理员两种情况123456789101112131415161718192021222324252627282930313233343536373839/* ****⽤于管理员修改⽤户资料 ***/void Modify(Ulink l){Unode *p; char findmess[20]; if(!l->next) {gotoxy(30,4);textcolor(RED);cputs("not thing could modify!"); getch(); return;}gotoxy(30,4);textcolor(RED); cputs("Modify User Message"); gotoxy(25,8); textcolor(YELLOW);cputs("input the User Id:");scanf("%s",findmess); p=Locate(l,findmess,"num"); if(p) {textcolor(YELLOW);gotoxy(25,10); printf("Inpute The New ID(old:%s):",p->data.num); scanf("%s",p->data.num); gotoxy(25,12);printf("Input The New Password(old:%s):",p->data.pass); scanf("%s",p->data.pass);gotoxy(25,14); printf("Input The New Name(old:%s):",p->); scanf("%s",p->);gotoxy(25,16);printf("Input The New Sex(old:%s):",p->data.sex); scanf("%s",p->data.sex); gotoxy(30,20);40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 textcolor(RED);cputs("Modify Success ");getch();textcolor(YELLOW);}else{gotoxy(30,16);textcolor(RED);cputs("Not Finde ");getch();}}/****供⽤户修改⽤户⾃⼰资料 */void Modify_user(Ulink l){Unode *p;char findmess[20];if(!l->next){gotoxy(30,4);textcolor(RED);cputs("not thing could modify!");getch();return;}gotoxy(30,4);textcolor(RED);cputs("Modify User Message");gotoxy(33,8);textcolor(YELLOW);strcpy(findmess,os->data.num);printf("your id:%s",findmess);p=Locate(l,findmess,"num");if(p){textcolor(YELLOW);gotoxy(24,10);printf("Input The New Password(old:%s):",p->data.pass); scanf("%s",p->data.pass);gotoxy(24,12);printf("Input The New Name(old:%s):",p->);scanf("%s",p->);gotoxy(24,14);printf("Input The New Sex(old:%s):",p->data.sex);scanf("%s",p->data.sex);gotoxy(31,18);textcolor(RED);cputs("Modify Success ");getch();textcolor(YELLOW);}else{gotoxy(30,16);textcolor(RED);cputs("Not Finde ");getch();}}添加借书函数1234567891011 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56/*******添加借书*******/void Add_borrow(BBlink l){Ulink H;/* 连表 */FILE*Fp; /* ⽂件指针 */Unode *Q,*T;blink L;/* 连表 */FILE*FP; /* ⽂件指针 */int ttl;Bnode *P,*R;char bookid[20];char bookname[20];char userid[20];BBnode *p,*r,*s;char num[10];r=l;s=l->next;while(r->next!=NULL)r=r->next;L=(Bnode*)malloc(sizeof(Bnode));L->next=NULL;R=L;FP=fopen(file,"rb");if(FP==NULL){FP=fopen(file,"wb");}while(!feof(FP)){P=(Bnode*)malloc(sizeof(Bnode));if(fread(P,sizeof(Bnode),1,FP)) /* 将⽂件的内容放⼊接点中 */ {P->next=NULL;bookcount=bookcount+P->data.count;R->next=P;R=P; /* 将该接点挂⼊连中 */}}fclose(FP); /* 关闭⽂件 */H=(Unode*)malloc(sizeof(Unode));H->next=NULL;T=H;Fp=fopen(ufile,"rb");if(Fp==NULL){Fp=fopen(ufile,"wb");}while(!feof(Fp)){Q=(Unode*)malloc(sizeof(Unode));60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 T->next=Q;T=Q; /* 将该接点挂⼊连中 */}}fclose(Fp);textcolor(RED);gotoxy(25,4);cputs("Please input thease message");gotoxy(30,10);textcolor(YELLOW);cputs("Input Borrow ID:");scanf("%d",&ttl);itoa(ttl,num,10) ;p=(BBnode *)malloc(sizeof(BBnode));while(s){if(strcmp(s->id,num)==0){gotoxy(30,15);cputs("Borrow ID:");printf("'%s'",num);cputs("is exist!");gotoxy(26,22);textcolor(RED);cputs("please Press any key to continue...");gotoxy(255,252);getch();return;}s=s->next;}strcpy(p->id,num);gotoxy(31,12);textcolor(YELLOW);cputs("Input book id:");scanf("%s",bookid);gotoxy(31,14);textcolor(YELLOW);cputs("Input book name:");scanf("%s",bookname);/***************************************图书判断在否***************************************/ if(cmpbook(L,bookid,bookname)){strcpy(p->bookid,bookid);strcpy(p->book,bookname);gotoxy(31,16);cputs("input your ID:");scanf("%s",userid); /**************************************⽤户判断在否********************************/if(cmpuser(H,userid)){strcpy(p->user,userid);p->next=NULL;r->next=p;r=p;if(changeb(L,bookid)){gotoxy(30,22);cputs("Borrow Success ");Save_borrow(l);borrowcount++;getch();}}}textcolor(YELLOW);}。
防灾科技学院实训报告书专业网络工程系别灾害信息工程系课程 C语言程序设计报告题目基于文件的小型图书管理系统的设计与实现报告人刘亚茹班级及学号 105043113 指导教师刘颖带队教师刘颖实训时间 8.22-8.26 实训单位 4#301教务处监制说明报告要有实训目的、要求、原理简述、方法、步骤、实训体会等,具体内容按各系及实训教师要求。
以下模板内容,如果你的程序里没有体现,就不用写。
目录1 前言 (4)2 系统需求分析 (4)2.1 问题定义 (4)2.2 需求分析 (5)2.3 项目开发计划 (6)3 系统设计 (8)3.1 系统功能框架 (8)3.2 数据结构设计 (9)3.3功能模块设计 (11)4 系统实现 (12)4.1 系统硬件环境 (12)4.2 系统软件环境 (12)4.3 开发工具 (12)4.4 系统功能模块设计与实现 (12)4.4.1 图书管理界面 (12)5 系统测试 (28)5.1 测试用例设计 (28)5.2 测试结果分析 (28)实训体会 (28)1 前言图书管理系统对于现代图书馆而言,是能否发挥其教学科研的作用的至关重要技术平台。
随着当今社会发展,信息化水平逐步提高,对图书管理有了新的要求,因此,编写一个信息管理系统是十分有必要的。
2 系统需求分析2.1 问题定义该软件主要是实现对图书信息进行系统化的管理,本系统要求实现以下的几个基本功能:(1)要求把所有录入的数据以文件的形式,保存在硬盘上。
(2)实现简易的提示菜单界面,用所学的知识尽量实现良好的、美观的“人机界面”,便于软件的操作使用。
(3)管理员登录时,需要验证密码,密码输入超过三次,自动退出系统。
(4)图书管理功能:包括图书添加功能、图书修改功能、图书删除功能和图书查询功能;(5)读者管理功能:包括读者添加功能、读者修改功能、读者删除功能和读者查询功能;(6)借阅管理功能:借书功能,还书功能,续借功能。
2.2 需求分析(1) 要求把所有录入的数据以文件的形式,保存在硬盘上。
//本电信学渣的大一小学期作业做的不好请见谅/*一、图书管理系统1.新书入库:图书信息包括书名,书号,库存量,现存量(库存量减去借走的图书)共4项.首先输入3本书的信息,并将其存数组book中.当有新书入库时,先判断数组中是否有此书(即比较书名或书号),若有则修改库存量,现存量的信息;若无此书,则将该书的信息添加到数组中,并将其库存量设为-1,将其标专为下次要购入的图书。
2.图书查询:(1)输入一个书号,在文件中查找此书,若找到则输出此书的全部信息;若找不到则输出查找失败的信息。
(2)查询所有要购入的图书的书名和书号。
3.借阅管理(1)每个读者的信息包括姓名,编号,借阅图书1,借阅图书2,借阅图书3,输入3个读者的信息并存入数组reader中.(2)借书登记:输入读者的姓名及所借图书的书号,先判断姓名是否在读者数组中,若有则将书号存入reader数组中,同时修改book数组中此书的现存量.若reader数组中无此姓名,则应提示错误。
(3)还书管理:输入读者的姓名,所还图书的书号,修改reader数组和book数组中相应的项。
4.输出全部图书信息和全部读者信息。
5.退出系统。
*/#include <stdio.h>#include <string.h>void zzdz();//读者注册void shuru();//新书注册void shuchu();//图书总数统计void shanchu();//删除书籍void find(); //书籍查找void borrow();//借书管理void repay(); //还书管理void scdzxx(); //读者统计//定义结构体类型struct s{char no[10];char name[10];};//定义结构体数组struct s book[50];struct i{char js[3][10],js1[10],js2[10],js3[10];char name[10],no[10];};//定义结构体数组struct i reader[50];int bzongshu=0,bxianshu=0,rzongshu=0;int n=0,m=0;int main(){int chioce=-1,xxx; //一级选项,二级选项printf("***************图书馆管理系统******************\n");while(chioce!=0){ //一级选项循环printf("请选择:\n图书管理请按1\n读者管理请按2\n退出请按0(否则将留在本层)\n请输入"); //输入提示scanf("%d",&chioce); //输入选项图书读者xxx=-1; //重置二级选项if(chioce==1){ //1为图书printf("您选择了图书管理\n");while(xxx!=0){ //二级选项循环printf("\n\n继续选择:\n"); //选printf("增加书目请按1\n"); //项printf("删除书目请按2\n"); //提printf("查询书目请按3\n"); //示printf("统计书目请按4\n"); //printf("返回上层请按0(否则将留在本层)\n");scanf("%d",&xxx);switch(xxx){case 1:shuru(); break; //新书注册case 2:shanchu(); break;//删除书籍case 3:find();break; //书籍查找case 4:shuchu();break; //图书总数统计case 0:printf("返回上层\n");break;//返回一级选项default:printf("输入错误");break;//报错}}}else{if(chioce==2){printf("\n\n您选择了读者管理\n");while(xxx!=0){printf("\n\n继续选择:\n");printf("注册读者请按1\n");printf("借阅系统2\n");printf("还书系统3\n");printf("读者统计4\n");printf("返回上层请按0(否则将留在本层)\n");printf("本馆共有读者%d人\n",rzongshu);scanf("%d",&xxx);switch(xxx){case 1:zzdz();break; //读者注册case 2:borrow();break;//借阅管理case 3:repay();break;//还书管理case 4:scdzxx();break;//读者统计case 0:printf("返回上层\n");break;default:printf("输入错误");break;//报错}}}else{if(chioce==0){printf("\n\n");break;}printf("\n\n选择错误,请重新选择\n");scanf("%d",&chioce);}}}printf("\n\n***************已退出,谢谢使用****************\n"); return 0;}//增加函数void shuru(){int j,i,geshu;printf("\n\n输入需要增加书目的个数:");scanf("%d",&geshu);for(i=bzongshu;i<(bzongshu+geshu);i++){printf("输入书号");scanf("%s",book[i].no);printf("输入书名");scanf("%s",book[i].name);}printf("结束输入;");n=n+geshu;bzongshu=bzongshu+geshu;bxianshu=bxianshu+geshu;}//输出数据void shuchu(){int i;for(i=0;i<n;i++){printf("书号:%s ",book[i].no);printf("书名:%s\n",book[i].name);}printf("共有%d本书\n现有%d本书\n",bzongshu,bxianshu); }//删除数据void shanchu(){int i,j,r=0,chxxx;char a[10];printf("删除选项:\n1:通过书号进行删除\n2:通过书名进行\n");scanf("%d",&chxxx);if(chxxx==1){printf("输入需要查询的书号:");scanf("%s",a);for(i=0;i<n;i++){if((strcmp(a,book[i].no))==0){for(;i<n;i++){strcpy(book[i].no,book[i+1].no);strcpy(book[i].name,book[i+1].name);i++;}n--;(bzongshu)--;(bxianshu)--;}}}else{if(chxxx==2){printf("输入需要查询的书名:");scanf("%s",a);for(i=0;i<n;i++){if((strcmp(a,book[i].name))==0){printf("书号:%s\n",book[i].no);printf("书名:%s\n",book[i].name);r++;}}}else{printf("输入错误");}}if(r==0) printf("无此书\n");return;}//查询数据void find() //strcmp{int i,j,r=0,chxxx;char a[10];printf("查询选项:\n1:书号查询\n2:书名查询\n");scanf("%d",&chxxx);if(chxxx==1){printf("输入需要查询的书号:");scanf("%s",a);for(i=0;i<n;i++){if((strcmp(a,book[i].no))==0){printf("书号:%s\n",book[i].no);printf("书名:%s\n",book[i].name);r++;}}}else{if(chxxx==2){printf("输入需要查询的书名:");scanf("%s",a);for(i=0;i<n;i++){if((strcmp(a,book[i].name))==0){printf("书号:%s\n",book[i].no);printf("书名:%s\n",book[i].name);r++;}}}else{printf("输入错误");}}if(r==0) printf("无此书\n");return;}//输入读者信息void zzdz(){int i,geshu;printf("输入需要注册的个数:");scanf("%d",&geshu);for(i=rzongshu;i<(rzongshu+geshu);i++){printf("输入读者号");scanf("%s",reader[i].no);printf("输入读者名");scanf("%s",reader[i].name);}m=m+geshu;rzongshu=m;printf("共有%d个读者\n",rzongshu);}//借阅管理void borrow(){int i,j,k,zdz=0,zs=0,z;char a[10],b[10],q[10];printf("您已进入借阅管理\n");printf("输入要求借书的读者姓名:\n");scanf("%s",a);for(i=0;i<rzongshu;i++){if((strcmp(a,reader[i].name))==0){printf("该读者存在,请输入要借阅图书的书号(3本)\n");for(j=1;j<=3;j++){zdz++;printf("输入要借的书号");scanf("%s",b);for(k=0;k<bzongshu;k++){if((strcmp(b,book[k].no))==0){printf("该书存在,借阅成功\n");bxianshu--;*(reader[i].js[j])=*(book[k].no);zs=1;}}if(zs==0){printf("无此书,将返回上层菜单\n");break;}}}}if(zdz==0){printf("该读者不存在,将返回上层选择菜单");}return;}//还书管理void repay(){int i,j,k,zdz=0,zs=0;char a[10],b[10];printf("您已进入还书管理\n");printf("输入要求还书的读者姓名:\n");scanf("%s",a);for(i=0;i<rzongshu;i++){if((strcmp(a,reader[i].name))==0){printf("该读者存在,请输入要归还图书的书号(3本)\n");for(j=1;j<=3;j++){zdz++;printf("输入要还的书号");scanf("%s",b);for(k=0;k<bzongshu;k++){if((strcmp(b,reader[i].js[j]))==0){printf("该书存在,还书成功\n");bxianshu++;*(reader[i].js[j])=' ';zs=1;}}if(zs==0){printf("无此书,将返回上层菜单\n");return;}}}}if(zdz==0){printf("该读者不存在,将返回上层选择菜单");}return;}//输出读者信息void scdzxx(){int i;for(i=0;i<rzongshu;i++){printf("读者号:%s\n",reader[i].no);printf("读者姓名:%s\n",reader[i].name);printf("借书1的书号:%s\n",reader[i].js[1]);printf("借书2的书号:%s\n",reader[i].js[2]);printf("借书3的书号:%S\n\n\n",reader[i].js[3]);}return;}。
c语言图书管理系统主要功能:1. 新进图书基本信息的输入。
2. 显示全部记录3. 按图书名称查询图书基本信息。
4. 根据图书名称对撤消的图书信息进行删除。
5. 按图书名称从小到大排序。
6. 统计某价格以上的图书数量。
7. 列出所有未借出去的图书信息。
基本信息:图书编号、图书名称、单价、作者、存在状态、借书人姓名、性别、学号等#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>typedef int BOOL;typedef struct bookinfo{char number[15];/*产品编号*/char name[30];/*产品名称*/float price;/*单价*/char auther[20];/*作者*/BOOL isExit;/*存在状态*/char lendername[20];/*借书人姓名*/char lendersex[2];/*借书人性别*/char lendernum[15];/*借书人学号*/}BOOKINFO;void menu(){printf("\n\n\n\n\n\n\n");printf("\t\t\t图书管理系统\n");printf("\t\t\t1:新进图书基本信息的输入\n");printf("\t\t\t2:显示全部记录\n");printf("\t\t\t3:根据图书名称查询图书基本信息\n");printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n");printf("\t\t\t5:按照图书名称从小大到排序\n");printf("\t\t\t6:统计某价格以上的图书数量\n");printf("\t\t\t7:列出所有未借出去的图书信息\n");printf("\t\t\t8:退出\n");}void choice_1_input_new()/*输入新进的图书信息*/{char choice;FILE *p;BOOKINFO newbook;system("cls");while(1){printf("输入图书编号:");gets(newbook.number);printf("输入图书名称:");gets();printf("输入图书单价:");scanf("%f",&newbook.price);while(getchar()!='\n');printf("输入图书的作者:");gets(newbook.auther);printf("输入借书人姓名:");gets(newbook.lendername);printf("输入借书人性别:");gets(newbook.lendersex);printf("输入借书人学号:");gets(newbook.lendernum);printf("是否保存该条书目?(Y/N)\n");choice=getch();while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')choice=getch();if(choice=='Y'||choice=='y'){newbook.isExit=1;/*将图书状态设置成1,表示没有借出*/p=fopen("c:\\bookinfo.data","ab");fwrite(&newbook,sizeof(BOOKINFO),1,p);fclose(p);printf("\n该条书目已添加到c:\\bookinfo.data文件中!\n");}else{printf("\n本条书目未保存!\n");}printf("\n是否继续添加书目?(Y/N)\n");choice=getch();while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')choice=getch();if(choice=='Y'||choice=='y')continue;elsebreak;}}void choice_2_display_all()/*显示全部图书信息*/{FILE *p;int n;BOOKINFO bookinfo[100];int booknumber=0;system("cls");p=fopen("c:\\bookinfo.data","rb");while(!feof(p)){fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);booknumber++;}/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/fclose(p);booknumber--;if(booknumber==0){printf("没有任何图书信息!\n\n");}else{n=0;printf(" 图书信息如下\n");printf(" 图书信息| 借书人信息\n");printf("编号名称单价作者图书状态| 姓名性别学号\n");while(n<booknumber){printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,bookinfo[n].lendersex,bookinfo[n].lendernum);n++;}}printf("\n\n按任意键回到主菜单!\n");getch();}void choice_3_search_according_name()/*根据图书名称显示图书的信息*/ {char search[20]="";/*search用来存放要查询的书名*/int n;FILE *p;char choice;BOOKINFO bookinfo[100];int booknumber=0;system("cls");p=fopen("c:\\bookinfo.data","rb");while(!feof(p)){fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);booknumber++;}booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/fclose(p);while(1){printf("输入要查询的书本名称:");gets(search);if(booknumber==0){printf("书库中没有任何信息!\n\n");printf("按任意键回到主菜单!\n\n");getch();break;}/*if结束*/else{for(n=0;n<booknumber;n++)if(strcmp(bookinfo[n].name,search)==0){printf("该书的详细信息如下:\n");printf(" 图书信息|借书人信息\n");printf("编号名称单价作者图书状态| 姓名性别学号\n");printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n", bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,bookinfo[n].lendersex,bookinfo[n].lendernum);break;}if(n>=booknumber)printf("没有查找该书的任何信息!\n");printf("\n\n是否继续查询?(Y/N)\n");choice=getch();while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')choice=getch();if(choice=='Y'||choice=='y')continue;elsebreak;}/*else结束*/}/*while(1)结束*/}void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/ {char search[20]="";/*search用来存放要删除的书名*/int n,i;FILE *p;char choice;BOOKINFO bookinfo[100];int booknumber;system("cls");while(1){printf("输入要删除的书本名称:");gets(search);p=fopen("c:\\bookinfo.data","rb");booknumber=0;while(!feof(p)){fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);booknumber++;}booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/fclose(p);if(booknumber==0){printf("书库中没有任何信息!\n\n");printf("按任意键回到主菜单!\n\n");getch();break;}/*if结束*/else{for(n=0;n<booknumber;n++)if(strcmp(bookinfo[n].name,search)==0){break;}if(n>=booknumber)printf("没有查找该书的任何信息!\n");else{printf("是否确认需要删除该条书目?(Y/N)");choice=getch();while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')choice=getch();if(choice=='Y'||choice=='y'){for(i=n;i<booknumber-1;i++)bookinfo[i]=bookinfo[i+1];booknumber--;p=fopen("c:\\bookinfo.data","wb");for(n=0;n<booknumber;n++)fwrite(&bookinfo[n],sizeof(BOOKINFO),1,p);fclose(p);printf("删除成功!\n");}elseprintf("\n\n该条书目没有被删除!");}printf("\n\n是否继续进行删除操作?(Y/N)\n");choice=getch();while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')choice=getch();if(choice=='Y'||choice=='y')continue;elsebreak;}/*else结束*/}/*while(1)结束*/}void choice_5_sort_according_name()/*根据图书名称排序*/{FILE *p;int m,n;BOOKINFO temp;BOOKINFO bookinfo[100];int booknumber;p=fopen("c:\\bookinfo.data","rb");booknumber=0;system("cls");while(!feof(p)){fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);booknumber++;}booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/fclose(p);if(booknumber==0){printf("没有任何图书信息!\n\n");}else{for(m=0;m<booknumber-1;m++)for(n=m+1;n<booknumber;n++)if(strcmp(bookinfo[m].name,bookinfo[n].name)>0){temp=bookinfo[m];bookinfo[m]=bookinfo[n];bookinfo[n]=temp;}p=fopen("c:\\bookinfo.data","wb");for(m=0;m<booknumber;m++)fwrite(&bookinfo[m],sizeof(BOOKINFO),1,p);fclose(p);printf("\n\n完成排序!\n\n");}printf("按任意键回到主菜单!\n");getch();}void choice_6_display_high_price()/*根据价格列出图书信息*/ {float price;FILE *p;int n;int count=0;BOOKINFO bookinfo[100];int booknumber;system("cls");printf("请输入价格:");scanf("%f",&price);p=fopen("c:\\bookinfo.data","rb");booknumber=0;while(!feof(p)){fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);booknumber++;}booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/fclose(p);if(booknumber==0){printf("没有任何图书信息!\n\n");}else{for(n=0;n<booknumber;n++){if(bookinfo[n].price>=price)count++;}if(count==0)printf("书库中没有比%.1f$价格高的图书!",price);else{printf(" 价格高于%.1f$的图书信息如下\n",price);printf(" 图书信息| 借书人信息\n");printf("编号名称单价作者图书状态| 姓名性别学号\n");for(n=0;n<booknumber;n++){if(bookinfo[n].price>=price)printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n", bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,bookinfo[n].lendersex,bookinfo[n].lendernum);}}}printf("\n\n按任意键回到主菜单!\n");getch();}void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/ {FILE *p;int n;int count=0;BOOKINFO bookinfo[100];int booknumber;system("cls");booknumber=0;p=fopen("c:\\bookinfo.data","rb");while(!feof(p)){fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);booknumber++;}booknumber--;fclose(p);if(booknumber==0){printf("书库中没有任何书目存在!\n");}else{for(n=0;n<booknumber;n++)if(bookinfo[n].isExit==1)count++;if(count==0)printf("书库中的书籍全部借出!\n");else{printf("书库中未被借出的图书信息如下:\n\n");printf(" 图书信息| 借书人信息\n");printf("编号名称单价作者图书状态| 姓名性别学号\n");for(n=0;n<booknumber;n++)if(bookinfo[n].isExit==1){printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n", bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,bookinfo[n].lendersex,bookinfo[n].lendernum);}}}printf("\n按任意键返回主菜单!\n");getch();}void main(){char choice;clock_t tm;FILE *p;if((p=fopen("c:\\bookinfo.data","rb"))==NULL){p=fopen("c:\\bookinfo.data","wb");fclose(p);}while(1){system("cls");menu();choice=getch();switch(choice){case '1':choice_1_input_new();break;/*输入新进的图书信息*/case '2':choice_2_display_all();break;/*显示全部图书信息*/case '3':choice_3_search_according_name();break;/*根据图书名称显示图书的信息*/case '4':choice_4_delete_according_name();break;/*根据图书名称对图书信息进行删除*/case '5':choice_5_sort_according_name();break;/*根据图书名称排序*/case '6':choice_6_display_high_price();break;/*根据价格列出图书信息*/case '7':choice_7_display_according_exitflag();break;/*根据存在状态列出图书信息*/case '8':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n");getch();return;default:printf("\n\n\t\t\t请输入菜单中的数字!(1~8)");tm=clock();while(clock()<tm+1800);break;}}}。