




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 报 告课 程 名 称: 程序设计实践 专 业 班 级 : 信息类1107 学 生 姓 名 : 王春平 学 号 : 201116910730 任 课 教 师 : 阎娟 学 期 :2011-2012学年第二学期 题 目图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)输入?(2)图书信息浏览功能输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): ? 按书名查询 按作者名查询 按照价钱排序 按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码 (2)课程报告二、整个设计过程具体要求(1)需求分析 要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师:27 课程报告任务书1:需求分析1)功能 创建一个图书管理系统;用文件保存和读出图书信息; 插入图书信息;查询某本图书; 通过遍历输出所有图书信息;删除与修改图书信息;按照图书的某个信息对其进行排序;统计图书系统中所含图书的数目;设置进入图书管理系统的密码,使系统相对安全。2)需处理的数据每本图书的信息:图书编号,书名,作者,出版社,类别,出版时间,价格,图书的剩余量。图书信息用文本文件的形式保存;2:概要设计 (1)数据结构主要数据结构:链表将每本图书的信息都保存在结构体中,并通过“结构体指针指向下一个结构体”的方式将图书信息连接成链表。每本图书信息保存的结构体如下:struct listint num;char name20;char author20;char publisher20;char kind20;char date; double price; int leaving; struct list * next;(2)模块划分a.创建链表b.插入c.删除按图书编号删除d修改按图书编号修改.e.统计库存量f.遍历g.文件导入h.文件导出i.查询按图书编号删除j.文件保存k.排序按图书价格排序 (3)程序总体框架开始main函数统计库存量Length函数,创建Creat函数,插入Insert函数,删除Delete函数,修改Revise函数,遍历 Print函数,文件导入fileread函数,文件导出filewrite函数,查询Search函数,文件保存fprint函数,排序Sorting函数结束程序运行(4)函数简介a:创建链表 struct list * Create();功能:创建图书信息函数来读取录取的图书信息,最后向main函数返回所建立链表的头指针。参数:无b:插入图书信息 struct list * Insert(struct list * head,struct list * book);功能:通过将创建函数和从main函数两种途径传过来的图书信息按编号连成一个链表,并将插入新元素的新链表的头指针返回给调用它的函数。最后main函数返回插入新元素后的链表的头指针。参数:struct list * head struct list * bookc:删除图书信息 struct list * Delete(struct list * head,int num);功能:通过从main函数中得到图书信息链表的头指针,运用两个指针的依次移动分别找到要删除的图书信息元素的前一个元素和后一个元素,之后通过指针指向的变换达到删除元素的目的,最后返回main函数一个删除后图书信息链表的头指针。参数:struct list * head,int numd:修改图书信息 struct list * Revise(struct list * head,int num);功能:通过从main函数中得到图书信息链表的头指针,运用指针的移动将要修改的元素的编号依次与链表中元素的编号进行对比找到要修改信息的元素。最后返回main函数一个修改后的图书信息链表的头指针。e:图书信息遍历函数:void Print(struct list * head);功能:通过从main函数中得到图书信息链表的头指针,通过设立的指针的依次向后移动输出每个图书的信息。参数:struct list * head)f: 图书信息统计函数 int Length(struct list * head);功能:通过对图书信息的遍历统计图书信息链表中共录入了多少图书信息,最后返回main函数一个统计后的后图书信息链表的头指针。参数:struct list * headg: 图书信息输入函数 struct list * fileread();功能:从外部文件中读取保存在其中的图书信息,并将这些信息建立成一个新的图书信息链表,再把这个链表的头指针返回给main函数供其它函数使用参数:无h:图书信息输出函数 void filewrite(struct list * head);功能:将录入的图书信息按照链表中的信息顺序保存到文件中参数:struct list * headi:对图书信息的排序 struct list * Sorting(struct list * head);功能:通过从main函数中得到图书信息链表的头指针,再通过指针一次从链表中取出一个图书信息并把这些信息按选定的方式排序。最后返回main函数一个排序后图书信息链表的头指针。参数:struct list * headj:保存图书信息 void fprint(struct list * head);功能:将图书信息永久的保存到文件中,并且在其它函数比如删除,修改中调用此函数,将处理后的图书信息保存到文件中参数:struct list * head3 详细设计图书信息统计函数int Length(struct list * head)int n=0; struct list * p; p=head; if(p=NULL) printf(没有图书信息n); for(;p!=NULL;p=p-next) n+; return n;图书信息创建函数struct list * Create()int num,leaving,q;char name20,author20,publisher20,kind20,date20;double price;int size=sizeof(struct list); struct list * head,* p,*tail;head=tail=NULL;printf(请输入图书编号:n);scanf(%d,&num);while(num!=0)printf(书名 作者 出版社 类别 出版时间 价格 剩余量n);scanf(%s%s%s%s%s%lf%d,name,author,publisher,kind,date,&price,&leaving);p=(struct list *)malloc(size);p-num=num;strcpy(p-name,name);strcpy(p-author,author);strcpy(p-publisher,publisher);strcpy(p-kind,kind);p-price=price;strcpy(p-date,date);p-leaving=leaving;p-next=NULL;if(head=NULL)head=p;elsetail-next=p;tail=p;printf(请输入图书编号:n);scanf(%d,&num);printf(是否将图书信息保存至文件?(1-是 0-否)n);scanf(%d,&q);if(q=1)fprint(head);printf(图书信息已成功保存至tushu_list.txt中!n);elseprintf(文件没有保存!n);return head;图书信息插入函数struct list *Insert(struct list * head,struct list * book)struct list *p,* p1,*p2;int q;p2=head;p=book;/*p指向待插入的结点*/if(head=NULL)head=p;/*新插入的结点成为头结点*/head-next=NULL;elsewhile(p-nump2-num)&(p2-next!=NULL)p1=p2;/*p1,p2各后移一个结点*/p2=p2-next;if(p-numnum)/*在p1,p2之间插入新结点*/if(head=p2)head=p;elsep1-next=p;p-next=p2;elsep2-next=p;p-next=NULL;printf(是否将插入新信息后的图书信息保存至文件?(1-是 2-否)n);scanf(%d,&q);if(q=1)fprint(head);printf(添加图书信息成功!n);return head;图书信息删除函数struct list * Delete(struct list * head,int num)struct list * p1,*p2;int z;while(head!=NULL&head-num=num)p2=head;head=head-next;free(p2);if(head=NULL)return NULL;p1=head;p2=head-next;/*从表头的下一个结点搜索待删除的结点*/while(p2!=NULL)if(p2-num=num)/*p2所指结点符合删除要求*/p1-next=p2-next;free(p2);elsep1=p2;/*p1后移一个结点*/p2=p1-next;/*p2指向p1的后一个结点*/printf(是否将删除后的图书信息保存至文件?(1-是 2-否)n);scanf(%d,&z);if(z=1)fprint(head);printf(删除图书信息成功!n);return head;图书信息修改函数struct list * Revise(struct list * head,int num)struct list * p1,*p2;int choice=0,d;if(head=NULL)printf(没有图书信息n);return NULL;p1=head;p2=head-next;while(p1!=NULL&p1-num=num)p2=p1;break;while(p2!=NULL)if(p2-num=num)break;elsep1=p2;p2=p1-next;printf(修改图书的哪个信息?1-书名 2-作者 3-出版社 4-类别 5-价格 6-出版时间 7-图书剩余量n);scanf(%d,choice);switch(choice)case 1:printf(请输入新的书名n);scanf(%s,p2-name);break;case 2:printf(请输入作者n);scanf(%s,p2-author);break;case 3:printf(请输入出版社n);scanf(%s,p2-publisher);break;case 4:printf(请输入图书类别n);scanf(%s,p2-kind);break;case 5:printf(请输入图书价格n);scanf(%.2lf,&p2-price);break;case 6:printf(请输入出版时间n);scanf(%s,p2-date);break;case 7:printf(请输入图书剩余量n);scanf(%d,&p2-leaving);break;printf(是否将修改后的图书信息保存至文件?(1-是 2-否)n);scanf(%d,&d);if(d=1)fprint(head);printf(修改图书信息成功!n);return head;图书信息遍历函数void Print(struct list * head)struct list *p; if(head=NULL)printf(没有图书信息n);return;printf(图书信息:n);printf(编号 书名 作者 出版社 类别 价格 出版时间 剩余量n);for(p=head;p!=NULL;p=p-next)printf(%2d%10s%10s%10s%10s%6.2lf%10s%2dn,p-num,p-name,p-author,p-publisher,p-kind,p-price,p-date,p-leaving);图书信息查找函数void Search(struct list * head)int a,num,b=0,c=0,price=0;struct list * p;p=head;printf(查询方式:1-图书编号,2-图书价格n);scanf(%d,&a);if(a=1) printf(请输入图书的编号:n);scanf(%d,&num);if(p=NULL)printf(没有图书信息n);while(1)if(p-num!=num)p=p-next;if(p=NULL)break;if(p-num=num)printf(所查询的图书信息是:n);printf(编号 书名 作者 出版社 类别 价格 出版时间 剩余量n);printf(%2d%10s%10s%10s%10s%6.2lf%10s%2dn,p-num,p-name,p-author,p-publisher,p-kind,p-price,p-date,p-leaving);b+;p=p-next;break;if(b=0)printf(n没有此书n);if(a=2)if(p=NULL)printf(没有图书信息!n);printf(请输入图书的价格:n);scanf(%.2lf,&price);printf(编号 书名 作者 出版社 类别 价格 出版时间 剩余量n);doif(p-price!=price)p=p-next;elseprintf(%2d%10s%10s%10s%10s%6.2lf%10s%2dn,p-num,p-name,p-author,p-publisher,p-kind,p-price,p-date,p-leaving);c+;p=p-next;while(p!=NULL);if(c=0)printf(没有此书!n);文件导入图书信息函数struct list * fileread()struct list * p,* p1,* head1;struct list book;int size=sizeof(struct list);FILE *fp;if(fp=fopen(a.txt,r)=NULL)printf(Cant open the file!n);exit(0);head1=p1=NULL;while(fread(&book,size,1,fp)=1)p=(struct list *)malloc(size);p-num=book.num;strcpy(p-name,);strcpy(p-publisher,book.publisher);strcpy(p-date,book.date);p-price=book.price;p-leaving=book.leaving;p-next=NULL;if(head1=NULL)head1=p;head1-next=NULL;p1=head1;elsep1-next=p;p1=p1-next;fclose(fp);return head1;文件导出图书信息函数void filewrite(struct list * head)struct list * p;/*用于指向链表的结点*/struct list book;int size=sizeof(struct list);p=head;FILE *fp;if(fp=fopen(a.txt,w)=NULL)printf(Cant open the file!n);exit(0);while(p!=NULL)book.num=p-num;strcpy(,p-name);strcpy(book.author,p-author);strcpy(book.publisher,p-publisher);strcpy(book.kind,p-kind);strcpy(book.date,p-date);book.price=p-price;book.leaving=p-leaving;fwrite(&book,size,1,fp);p=p-next;fclose(fp);图书信息排序函数struct list * Sorting(struct list * head) struct list * b,* p,* p1,* p2,* head2;int size=sizeof(struct list);int n=0,v;p1=head2=NULL;p=head;while(p!=NULL)b=(struct list *)malloc(size);b-num=p-num;strcpy(b-name,p-name);strcpy(b-author,p-author);strcpy(b-publisher,p-publisher);strcpy(b-kind,p-kind);strcpy(b-date,p-date);b-price=p-price;b-leaving=p-leaving;if(head2=NULL)head2=b;head2-next=NULL;p1=head2;p2=p1;elsewhile(b-pricep1-price)&(p1-next!=NULL)p2=p1;p1=p1-next;if(b-priceprice)if(head2=p1)head2=b;elsep2-next=b;b-next=p1;p1=head2;elsep1-next=b;b-next=NULL;p1=head2;p=p-next;printf(是否将排序后的图书信息保存至文件?(1-是 2-否)n); scanf(%d,&v);if(v=1)fprint(head);printf(对图书信息排序成功!n);return head;文件保存图书信息函数void fprint(struct list * head)struct list *ptr;if(fp=fopen(tushu_list.txt,w)=NULL)printf(Cant open the file!n);exit(0);if(head=NULL)pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025秋开学全体教师大会,分管安全副校长讲话:以安全为纲,以德育为翼,共筑新学期校园安全与育人新征程
- 2025年高级技师题库及答案
- 2025年高级保安员模拟试题及参考答案
- 高级收纳师题库及答案
- 政务员礼仪考试题及答案
- 电工复审新试题及答案
- 装备服务保障管理办法
- 西藏土豆存货管理办法
- 老土地登记管理办法
- 产品报废销毁管理办法
- 集成电路测试指南
- 铝合金搅拌摩擦焊技术研究进展
- 2025年淫羊藿提取物项目可行性研究报告
- NB/T 11536-2024煤矿带压开采底板井下注浆加固改造技术规范
- 呼吸内科培训与考核制度
- DB11T 2330-2024 行业协会商会诚信建设规范
- 变电站消防设施技术规范书
- 人教版九年级数学上册旋转《图形的旋转第1课时》示范公开课教学课件
- (新版)电信网上大学智能云服务交付工程师认证考试题库-上(单选题)
- 新能源电力市场交易与运营考核试卷
- 2015-2024年十年高考数学真题分类汇编专题21 立体几何大题综合
评论
0/150
提交评论