作者:电子商务09-2班卢佳学号:**********《高级语言程序设计(C)》课程设计报告书设计题目图书管理系统姓名专业班级学号指导老师成绩营销管理学院电子商务系2011年1月目录一引言 (3)二系统功能和原始数据 (3)三程序总体设计 (4)四功能模块函数设计和调试 (5)五程序清单 (12)六课程设计总结 (17)一引言在理论学习和基础实验的基础上,开发规模较大的程序,掌握应用计算机解决实际问题的基本方法,熟悉C程序开发的全过程.本任务应用指针编制小型的图书管理系统.通过整个程序开发的过程,提高综合应用C语言的能力,编程和调试能力.二系统功能和原始数据(一) 系统功能(1)主菜单0.图书信息录入1.图书信息浏览2按书名查询图书信息3.按ISBN查询图书信息4.增加图书信息5.按书名排序6.删除记录7.保存文件8.打开文件9.退出(2)各项功能0.图书信息录入:输入图书的名字、ISBN、作者、价格、出版社等。
1. 图书信息浏览:图书的名字、ISBN、作者、价格、出版社等2.查看与书的名字有关的信息:根据书名查找书。
3.查看与作者有关的书的信息:根据作者查找书。
4.增加书的信息:输入书的名字、ISBN、作者、价格、出版社等。
5按照书名排序:字母的形式排序6删除记录:删除一条书的信息7.保存文件8.文件打开9.退出(二) 原始数据图书信息:图书信息包括:书名.isbn.分类号.作者.出版日期.出版社.价格三程序总体设计(一)数据结构:struct record{char name[20];char isbn[20];char author[40];char price[10];char company[30];}(二)模块划分:四功能模块函数设计和调试(一) 函数原型,功能和形参说明函数原型:V oid adduser() V oid list() V oid search_name() V oid search_isbn() V oid add() V oid listbyname() V oid dele() V oid save() V oid read()函数功能:adduser() 增加书籍信息list() 显示书籍信息search_name() 按书名查找search_isbn() 按ISBN号码查找add() 增加书籍信息listbyname() 按书名排序dele() 删除书籍信息save() 保存read() 文件打开参数说明:read()/*从文件中读入数据*/ FILE *fp; /*定义文件指针*/(二)函数流程图书名查找与ISBN查找方法相同按书名删除与按ISBN删除方法相同(三)运行结果五程序清单#include<iostream.h> /*引用库函数*/ #include <stdio.h>#include<iostream.h>#include <string.h>#include <conio.h>#include <stdlib.h>#define null 0 ;struct record{char name[20];char isbn[20];char author[40];char type[10];char date[10];char price[10];char company[30];}student[30];struct LinkList{struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();/*菜单函数*/ int adduser();int list();int search_name();int search_isbn();int add();int listbyname();int dele();int save();int read();int exit();void main(){system("cls");/*运行前清屏*/ for(;;){switch(menu_select()){case 0:adduser();break;case 1:list();break;case 2:search_name();break;case 3:search_isbn();break;case 4:add();break;case 5:listbyname();break;case 6:dele();break;case 7:save();break;case 8:read();break;case 9:exit(0);}}}menu_select(){int s;int a;cout<<"*_* 按任意键进入菜单! *_* "<<endl;getch();system("cls");cout<<"\t\t********************MENU*********************\n"<<endl; cout<<"\t\t 0. 图书信息录入"<<endl;cout<<"\t\t 1. 图书信息浏览 "<<endl;cout<<"\t\t 2. 按书名查询图书信息"<<endl;cout<<"\t\t 3. 按ISBN查询图书信息"<<endl;cout<<"\t\t 4. 增加图书信息"<<endl;cout<<"\t\t 5. 按书名排序"<<endl;cout<<"\t\t 6. 删除记录"<<endl;cout<<"\t\t 7. 数据保存"<<endl;cout<<"\t\t 8. 文件打开"<<endl;cout<<"\t\t 9.退出"<<endl;cout<<"\t\t***********************************************"<<endl; do{cout<<"\n 输入你的选择(0~9):";cin>>s;a=s;}while (a<0||a>9);return a;}adduser() //输入函数{cout<<"\n\t\t**************** 请输入图书信息 ****************"<<endl; cout<<"\n\t\t输入书名:";/*交互输入*/cin>>student[num].name;cout<<"\n\t\t输入ISBN:";cin>>student[num].isbn;cout<<"\n\t\t输入作者:";cin>>student[num].author;cout<<"\n\t\t输入分类号:";cin>>student[num].type;cout<<"\n\t\t输入出版日期:";cin>>student[num].date;cout<<"\n\t\t输入价格:";cin>>student[num].price;cout<<"\n\t\t输入出版单位:";cin>>student[num].company;num++;cout<<"\n\t\t是否继续添加?(Y/N):";char z;cin>>z;if((z=='y')||(z=='Y'))adduser();return(0);}int list() //显示函数{int i;system("cls");if(num!=0){cout<<"\n\t\t*************** 以下为该书所有信息************";for(i=0;i<num;i++)/*循环输入*/{cout<<"\n\t\t书名:"<<student[i].name;cout<<"\n\t\tISBN: "<<student[i].isbn;cout<<"\n\t\t作者: "<<student[i].author;cout<<"\n\t\t分类号: "<<student[i].type;cout<<"\n\t\t出版日期: "<<student[i].date;cout<<"\n\t\t价格: "<<student[i].price;cout<<"\n\t\t出版单位:"<<student[i].company;cout<<"\t\t";if(i+1<num){cout<<"\n\t\t__________________________";system("pause");}}cout<<"\n\t\t************************************************"; }elsecout<<"\n\t\t书库中无任何纪录";cout<<"\n\t\t按任意键返回主菜单:";getch();return(0);}search_name() //按书名查找{int mark=0;int i;int a=0;cout<<"\n\t\t***************** 按书名查找 *******************"; char name[20];cout<<"\n\t\t请输入书名:";cin>>name;for(i=a;i<num;i++){if(strcmp(student[i].name,name)==0){cout<<"\n\t\t************* 以下是您查找的信息 ***************"; cout<<"\n\t\t书名: "<<student[i].name;cout<<"\n\t\tISBN: "<<student[i].isbn;cout<<"\n\t\t作者: "<<student[i].author;cout<<"\n\t\t分类号: "<<student[i].type;cout<<"\n\t\t出版日期: "<<student[i].date;cout<<"\n\t\t价格: "<<student[i].price;cout<<"\n\t\t出版单位:"<<student[i].company;cout<<"\n\t\t************************************************";mark++;if((i+1)<num){cout<<"\n\t\t是否继续查找相同名字的信息:(y/n)";char y;cin>>y;if((y=='y')||(y=='Y')){a=i;continue;}elsereturn(0);}else{cout<<"\n\t\t按任意键返回主菜单";getch();return(0);}}}if(mark==0){cout<<"\n\t\t没有相同书名纪录";cout<<"\n\t\t按任意键返回主菜单";getch();return(0);}}search_isbn() //按ISBN查找{int mark=0;int i;int a=0;cout<<"\n\t\t****************** 按ISBN查找 ******************"; char isbn[10];cout<<"\n\t\t请输入ISBN:";cin>>isbn;for(i=0;i<num;i++){if(strcmp(student[i].isbn,isbn)==0){cout<<"\n\t\t************** 以下是您查找的书籍信息 **********";cout<<"\n\t\t书名: "<<student[i].name;cout<<"\n\t\tISBN: "<<student[i].isbn;cout<<"\n\t\t分类号: "<<student[i].type;cout<<"\n\t\t出版日期: "<<student[i].date;cout<<"\n\t\t价格: "<<student[i].price;cout<<"\n\t\t作者: "<<student[i].author;cout<<"\n\t\t出版单位:"<<student[i].company;cout<<"\n\t\t************************************************";cout<<"\n\t\t按任意键返回主菜单:";mark++;getch();return(0);}}if(mark==0){cout<<"\n\t\t没有更改信息";cout<<"\n\t\t按任意键返回主菜单";getch();return(0);}return(0);}add() //增加书籍信息{int i;if((fp=fopen("student.bin","wb"))==NULL){cout<<"\n\t\t文件打开失败";}for (i=0;i<num;i++){if (fwrite(&student[i],sizeof(struct record),1,fp)!=1){cout<<"\n\t\t写入文件错误!\n";}cout<<"\n\t\t**************** 请输入书籍信息 ****************"<<endl; cout<<"\n\t\t输入书名:";cin>>student[num].name;cout<<"\n\t\t输入ISBN号码:";cin>>student[num].isbn;cout<<"\n\t\t输入作者:";cin>>student[num].author;cout<<"\n\t\t输入出版日期:";cin>>student[num].date;cout<<"\n\t\t输入分类号:";cin>>student[num].type;cout<<"\n\t\t输入价格:";cin>>student[num].price;cout<<"\n\t\t输入出版单位:";cin>>student[num].company;num++;cout<<"\n\t\t是否继续添加?(Y/N):";if(getch()=='y')adduser();return(0);}fclose(fp);cout<<"\n\t\t图书文件已保存";cout<<"\n\t\t按任意键退出程序\n\t\t";exit(0);return(0);}void deletebyisbn(){int i,j;int deletemark=0;char isbn[20];cout<<"\n\t\t请输入要删除ISBN号码:";cin>>isbn;if(num==0){cout<<"\n\t\t对不起,文件中无任何纪录";cout<<"\n\t\t按任意键返回主菜单";getch();return;}for (i=0;i<num;i++){if(strcmp(student[i].isbn,isbn)==NULL){cout<<"\n\t\t以下是您要删除的书籍纪录:"; cout<<"\n\t\t书名: "<<student[i].name; cout<<"\n\t\tISBN: "<<student[i].isbn;cout<<"\n\t\t分类号: "<<student[i].type;cout<<"\n\t\t出版日期: "<<student[i].date; cout<<"\n\t\t价格: "<<student[i].price;cout<<"\n\t\t作者: "<<student[i].author;cout<<"\n\t\t出版单位:"<<student[i].company; cout<<"\n\t\t是否删除?(y/n)";char u;cin>>u;if((u=='y')||(u=='Y')){for(j=i;j<num-1;j++)student[j]=student[j+1];num--;deletemark++;cout<<"\n\t\t删除成功";cout<<"\n\t\t是否继续删除?(y/n)";char v;cin>>v;if((v=='y')||(v=='Y'))deletebyisbn();return;}elsereturn;}continue;}if(deletemark==0){cout<<"\n\t\t没有该书籍的纪录";cout<<"\n\t\t是否继续删除?(y/n)";char m;cin>>m;if((m=='y')||(m=='Y'))deletebyisbn();return;}}void deletebyname(){int a=0;int findmark=0;int j;int deletemark=0;int i;char name[20];cout<<"\n\t\t请输入要删除书籍名称:";cin>>name;for(i=a;i<num;i++){if(strcmp(student[i].name,name)==NULL){cout<<"\n\t\t以下是您要删除的书籍纪录:";findmark++;cout<<"\n\t\t________________________________"; cout<<"\n\t\t书名: "<<student[i].name;cout<<"\n\t\tISBN: "<<student[i].isbn;cout<<"\n\t\t分类号: "<<student[i].type;cout<<"\n\t\t作者: "<<student[i].author;cout<<"\n\t\t出版日期: "<<student[i].date;cout<<"\n\t\t价格: "<<student[i].price;cout<<"\n\t\t出版单位:"<<student[i].company; cout<<"\n\t\t________________________________"; cout<<"\n\t\t是否删除?(y/n)";char n;cin>>n;if((n=='y')||(n=='Y')){for(j=i;j<num-1;j++)student[j]=student[j+1];num--;deletemark++;cout<<"\n\t\t删除成功";if((i+1)<num){cout<<"\n\t\t是否继续删除相同书籍信息?(y/n)"; char l;cin>>l;if((l=='y')||(l=='Y')){a=i;continue;}}cout<<"\n\t\t是否继续删除?(y/n)";char o;cin>>o;if((o=='y')||(o=='Y'))deletebyname();return;}if((i+1)<num){cout<<"\n\t\t是否继续删除相同书名信息?(y/n)"; char p;cin>>p;if((p=='y')||(p=='Y')){a=i;continue;}}}elsecontinue;}if((deletemark==0)&&(findmark==0)){cout<<"\n\t\t没有该书籍的纪录";cout<<"\n\t\t是否继续删除?(y/n)";char q;cin>>q;if((q=='y')||(q=='Y'))deletebyisbn();return;return;}else if(findmark!=0){cout<<"\n\t\t没有重名信息";cout<<"\n\t\t没有该书纪录";cout<<"\n\t\t是否继续删除?(y/n)";char r;cin>>r;if((r=='y')||(r=='Y'))deletebyisbn();return;return;}}dele() //删除书籍信息{int choic;cout<<"\n\t\t1-按ISBN号码删除 2-按书名删除"; cout<<"\n\t\t请选择:";cin>>choic;switch (choic){case 1:deletebyisbn();break;case 2:deletebyname();break;}return(0);}listbyname() //按书名排序{int i,j;struct record tmp;for(i=1;i<num;i++){if(strcmp(student[i].name,student[i-1].name)<0){tmp=student[i];j=i-1;do{student[j+1]=student[j];j--;}while ((strcmp(,student[j].name)<0&&j>=0)); student[j+1]=tmp;}}cout<<"\n\t\t排序成功,是否显示?(y/n)";char x;cin>>x;if((x=='y')||(x=='Y'))list();return(0);}save() //保存资料{int j;FILE*fp;fp=fopen("student.txt","w");if (fp==NULL)cout<<"不能打开文件.";if(num!=0){for(j=0;j<num;j++){fwrite(student,sizeof(student),1,fp);}}cout<<"保存成功!";fclose(fp);return(0);}read()/*从文件中读入数据*/{int n;int m=0,num;FILE *fp; /*定义文件指针*/char filename[20]; /*定义文件名*/cout<<"输入文件名:"<<endl;cin>>filename; /*输入文件名*/if((fp=fopen("student.txt","rb"))==NULL) /*打开文件*/{cout<<"=====>提示:无法打开这个文件!"<<endl; /*打开失败信息*/cout<<"\t\t\t";system("pause");return(n);}fscanf(fp,"%d",&num); /*读入总记录量*/while(m<num) /*循环读入数据*/{fscanf(fp,"%s%d%s%f%f%f%f%f%f%f",&student[n+m].name,&student[n+m].isbn,&s tudent[n+m].author,&student[n+m].type,&student[n+m].date,&student[n+m].pr ice,&student[n+m].company);m++;}n+=num;fclose(fp); /*关闭文件*/cout<<"=====>提示:读入数据成功,可选择【图书信息浏览】查看"<<endl;cout<<"\t\t\t";system("pause");return(n);}六课程设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对本人实际工作能力的具体训练和考察过程.在整整两周的日子里,可以学到很多很多的的东西,在设计中遇到了很多编程问题,通过查找资料、回顾课本等终于完成了课程设计。