《c语言程序设计》课程设计报告(小组)_第1页
《c语言程序设计》课程设计报告(小组)_第2页
《c语言程序设计》课程设计报告(小组)_第3页
《c语言程序设计》课程设计报告(小组)_第4页
《c语言程序设计》课程设计报告(小组)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东莞理工学院 C 语言程序设计课程设计 题 目:图书信息管理系统 院 系:电子工程学院 专 业:电子信息工程 年 级:2009 班 别: 2 班 指导教师:侯家利 组 长:黄培周(200941301208) 同组成员:邹日宙 (200941301211) 陈俊杰(200941301239) 叶毅杰(200941301225) 目录 一、目的 1 二、需求分析 1 三、概要设计 1 四、详细设计 3 五、调试分析 4 六、测试结果 5 七、用户使用说明 12 八、课程设计总结12 附录:参考代码 13 图书信息管理系统 13 一 目的 本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。将本 学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力, 提高学生适应实际、实践编程的能力,使对 C 语言系统编程有一个大致的了解。 二 需求分析 根据图书馆图书信息管理的需要,建立一个“图书信息管理系统”,以方便对图书的各 项管理操作。开发目的如下: 1、图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。 2、图书信息管理系统,提供以下功能: 1)图书信息录入功能(图书信息用文件保存)输入; 2)图书信息浏览功能输出 ; 3)查询和排序功能:算法 ; 4)按书名查询 ; 5)按作者名查询 ; 6) 按登录号从大到小排列; 7)图书信息的删除与修改 三 概要设计 程序总体功能框架: 开 始 界 面 主 要 提 示 的 菜 单 界 面 插 入 图 书 信 息 浏 览 图 书 信 息 查 询 图 书 信 息 删 除 图 书 信 息 修 改 图 书 信 息 采用结构: struct tsxx /定义结构 long dlnum; /定义登录号 char bname10; /定义书名 char aname10; /定义作者名 char scnum10; /定义分类号 char plname10; /定义出版社名 char time11; /定义录入时间 float price; /定义价格 struct tsxx * next; /定义指向下一个结构的首地址 ; 链表结构: head 各功能独立自定义的函数: 1、插入图书信息(按登录号从大到小排序): struct tsxx * zengjia(struct tsxx * head) /传递链表的首地址,并返回链表的首地址 2.、浏览全部的图书信息: void Ptrint_Stu_Doc(struct tsxx *head) /传递链表的首地址 3、查询图书信息(包括书名查询和作者名查询): void Check(struct tsxx * head) /传递链表的首地址 4、删除图书信息: struct tsxx * Delete(struct tsxx * head) /传递链表的首地址,并返回链表的首地址 5.、修改图书信息: struct tsxx * revise(struct tsxx * head) /传递链表的首地址,并返回链表的首地址 其他一些变量的定义: long size; /定义结构的大小 FILE * fp; /定义文件指针,指向文件 struct tsxx * head; /定义链表的首地址 struct tsxx * p; /定义结构指针 char choice; /定义选择变量 struct tsxx A struct tsxx B struct tsxx C struct tsxx D NULL 四 详细设计 1、 设计思路: 首先,输入一些图书信息,申请一个结构类型的动态内存,把图书信息赋值到动态内 存内,每一快动态内存存放一本图书的信息,并形成一条链表,比较登录号的大小,按登 录号从大到小排列; 然后,建立并打开一个文件,把链表中的数据写入文件中,然后关闭文件; 最后,插入功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表, 输入你想要插入的图书信息,比较登录号的大小,然后把新的图书信息按照登录号的大小 顺序插入链表里面,新建一个文间,把新的链表写入文件中; 浏览功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,然后 链表头开始,把结构中的数据一个一个输出到界面上; 查询功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表;选择 你要查询的方式:1 是按书名查询,2 是按作者名查询。输入你的选择,判断你的查询方式。 书名查询:输入你要查询的书名,在链表中查找你这本书,然后把这本书的信息输出 到界面上; 作者名查询:输入你要查询的作者名,在链表中查找对应作者名的图书的信息,并把 信息输入到界面上; 修改功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入 你要修改的图书的登录号,在链表中查找对应登录号的图书信息的结构,重新输入你要修 改的图书的全部信息,并把这些新的图书信息赋值给找到的结构,覆盖旧的图书信息,新 建一个文件,存放新的图书信息; 删除功能:先把所有的数据从文件中读出来,申请动态内存来存放,形成链表,输入 你要删除的图书的登录号,在链表中查找对应登录号的图书信息的结构与前一个结构,让 前一个结构的 next 指向对应登录号结构的下一个结构,释放动态内存,新建一个新的文件, 存放新的图示信息; 2、数据结构的选择: 据图书信息表特点,决定选用链表这种数据结构(也可用其它的数据结构) 来作为组成成绩 数据库的基本框架。链表是最简单也是最常用的一种动态数据结构。它是对动态获得的内 存进行组织的一种结构。选用链表有得好处: 1.即用即申请,不会造成内存空间的浪费; 2.是数据之间既有独立性,又便于数据的相互连系; 3.便于数据的添加及删除等优点。 3、设计思想的选择: 用模块化程序设计理念,对各个功能定义不同函数,分块处理,这样有利于后期调试及今 后对功能的完善。 五 调试分析 1、把数据从文件中拿出来时,当文件是空的,它也会读数据,这时的数据时 0;当文件不 空时,最后的数据会被读两次。因此,这样读出来的文件就会出现一些小差错,必须做适 当的调整。当文件为空,把链表的首地址 head 赋值为 NULL,然后释放动态内存;当文件 不为空时,把链表的最后第二个结构的 next 赋值为 NULL,然后释放动态内存。 2、因为开始时定义 choice 为整型变量,所以只能输入整数,如果不小心输入字符数时, 整个程序就出现错误,不能继续运行。因此,我们把 choice 重新定义成字符型,这样就可 以输入字符数,所以后面用 switch 时,也要改成字符型。 3、一开始运行程序是,因为还没有创建文件,所以在读取文件中的数据时,就会出现“不 能打开文件”的错误。因此,在一开始运行程序时必须要先创建一个文件,以后程序就会 自动建立一个新的文件。 4、在作者名查询那里,一开始是当查找到一条对应的结构数据时,因为用了 break,所以 就直接退出了循环,因此如果一个作者有多本书是,以只能查询一本书的信息。调试后, 我们把 break 删掉,这样它就会一直循环,直到链表的最后一条数据,它才会跳出循环。 这样就能把一个作者全部的书都显示出来。 六 测试结果 1、数据的输入: 新建一个文件,并把数据写入文件中: 增加功能: 查询功能: 浏览功能: 修改功能: 删除功能: 七 用户使用说明 一开始运行程序时,就会出现一个让你选择的界面,1.是增加数据,2 是查询数据,3 是浏 览数据,4 是修改数据,5 是删除数据,6 是输入数据,并新建一个文本存这些数据,0 是 退出程序。 当你输入 1 时,界面就会输出“Enter the static(lognum bookname authorname scorenum publishname time price):”,接着你就输入你要增加的图书的信息就可以了。 当你输入 2 时,就会在出现一个让你选择的界面,1 是书名查询,2 是作者名查询。 当你输入 1 时,如果文件时空的,界面就会输出“N0 Records”,如果文件不是空的, 界面就会输出“Input bname:”,就着你就输入你要查询的图书的书名,如果文件中没有你 要查询的这本书,界面就会输出“There isnt this static!” ,当文件中有你要查询的这本书时, 界面就会输出这本书的全部信息。 当你输入 2 时,如果文件时空的,界面就会输出“N0 Records”,如果文件不是空的, 界面就会输出“Input aname:”,就着你就输入你要查询的图书的作者名,如果文件中没有 你要查询的这本书,界面就会输出“There isnt this static!”,当文件中有你要查询的这本书 时,界面就会输出这本书的全部信息。 当你输入 3 时,界面就会输出全部图书的全部信息; 当你输入 4 时,界面就会输出“Input the lognum:” ,接着你要输入你要修改的图书的登录 号,如果文件时空的,界面就会输出“Not records!”,如果文件不是空的,但没有你所输入 的登录号的图书,界面就会输出“There isnt this static!”,如果文件不是空的,并且有你输 入的登录号的图书,界面就会输出这本书的全部信息,很“Retype the static:”,接着你重新 输入这本书的全部信息就可以了。 当你输入 4 时,界面就会输出“Input dlnum:”,接着你就输入你要删除的图书的登录号就 可以了。 当你输入 6 时,界面就会输出“Enter the static(lognum bookname authorname scorenum publishname time price):”,接着你就输入你要增加的图书的信息就可以了。 当你输入 0 时,就退出程序 当你输入的是其他的数字或是字符时,界面就会输出“Enter error!” 。 八 课程设计总结 做为这个小组的组长,我觉得我们所设计的程序今本上已经能够实现题目的要求,并 且运用的链表,还用文件来存数据。但是,我觉得我们的程序还是存在着一些不足之处。 首先建立一个文件是文件名和拓展名都已经被规定好的,其次是当文件为空时,程序运行 时,当你输入得选择不是 6 是,会发生错误,所以一开始要先运行选择 6,后才能运行其他 选择,最后是运行查询、修改、删除功能,你输入的信息要跟文件中的一致,才能实现, 如果稍有不同,就不够实现这些功能了。 另外,我想感谢我的组员,因为我们是分工合作的,他们有的负责一个功能,有的负 责两个功能,而我主要是些主函数,在他们的积极配合下,我们很快就把总程序写好,并 调试完毕。所以我想感谢他们的配合。因为集体的力量是强大的,只有我们的积极合作, 才能够准时的完成这个课程设计。 最后,我觉得在这个课程设计的过程中,我学到了很多东西。第一是耐心,当你在调 试程序中,看到了你设计的程序出现了那么多错误,或者当显示 0 错误 0 警告,却不能运 行,或者是运行结果不是你所期望时,我觉得这时候最是考验耐心的时候,也只有耐心和 永不言败的信念,才能支持你逆流而上,解决所有的困难。在这个过程中,我试过用了几 个钟的时间找一个错误,而结果只是打错了一个定义。第二是沟通,因为我对 C 语言也比 较熟了,有一些同学比较陌生,所以他们来问我,在我解答他们的问题是,我深刻的体会 了沟通的重要性,因为只有你沟通的好,他们容易理解,你也不用浪费口舌去讲一些不必 要的知识点 程序参考代码: /*.主函数.*/ #include #include #include struct tsxx /定义结构 long dlnum; char bname10; char aname10; char scnum10; char plname10; char time11; float price; struct tsxx * next; ; long size; FILE * fp; struct tsxx * vitil(void) /从文件中拿出数据 struct tsxx * p1,* p2,* p3; long dlnum; char bname10; char aname10; char scnum10; char plname10; char time11; float price; long i=0; if(fp=fopen(“程序设计.txt“,“r“)=NULL) /打开文件 printf(“can not open file 程序设计.txt!n“); exit(0); while(! feof(fp) if(i=1) p3=p1; if(p1=(struct tsxx *)calloc(1,size)=NULL) printf(“Not able to allocate memory.n“); exit(1); fscanf(fp,“%ld%s%s%s%s%s%f“, p1-dlnum=dlnum; strcpy(p1-bname,bname); strcpy(p1-aname,aname); strcpy(p1-scnum,scnum); strcpy(p1-plname,plname); strcpy(p1-time,time); p1-price=price; if(i=0) p2=p1; else p3-next=p1; i+; if(p2-next=p1) p2-next=NULL; else p3-next=NULL; free(p1); fclose(fp); /关闭文件 return p2; void inputchoice(void) printf(“n Choice:n“); printf(“1.Addn“); printf(“2.Checkn“); printf(“3.Scann“); printf(“4.Revisen“); printf(“5.Delectn“); printf(“6.Enter the stacticn“); printf(“0.Exitn“); void write_to_txt(struct tsxx * head) /写入文件 struct tsxx * p; if(fp=fopen(“程序设计.txt“,“w“)=NULL) printf(“can not open file 程序设计.txt!n“); exit(0); for(p=head;p;p=p-next) fprintf(fp,“%ld %s %s %s %s %s %fn“,p-dlnum,p-bname,p-aname,p- scnum,p-plname,p-time,p-price); fclose(fp); #include“check_and_delect.c“ /查询和删除 #include“zengjia.c“ /增加 #include“xiugai.c“ /修改 main() struct tsxx * head=NULL,* p; char choice; size=sizeof(struct tsxx); inputchoice(); scanf(“%s“, while(choice!=0) switch(choice) case 1: head=vitil(); /把数据从文件中取出来 head=zengjia(head); /增加数据 write_to_txt(head); /写入文件 break; case 2: head=vitil(); /把数据从文件中取出来 Check(head); /查询 break; case 3: head=vitil(); /把数据从文件中取出来 Ptrint_Stu_Doc(head); /浏览 break; case 4: head=vitil(); /把数据从文件中取出来 head=revise(head); /修改 write_to_txt(head); break; case 5: head=vitil(); /把数据从文件中取出来 head=Delete(head); /删除 write_to_txt(head); break; case 6: head=zengjia(head); write_to_txt(head); break; default: printf(“Enter error!n“); break; inputchoice(); scanf(“%s“, while(head!=NULL) /释放链表 p=head; head=head-next; free(p); /*增加功能.*/ struct tsxx * zengjia(struct tsxx * head) /增加数据 struct tsxx * p1,* p2,*p3; long dlnum; char bname10; char aname10; char scnum10; char plname10; char time11; float price; if(p1=(struct tsxx *)calloc(1,size)=NULL) printf(“Not able to allocate memory.n“); exit(1); printf(“Enter the static(lognum bookname authorname scorenum publishname time price):n“); scanf(“%ld%s%s%s%s%s%f“, p1-dlnum=dlnum; strcpy(p1-bname,bname); strcpy(p1-aname,aname); strcpy(p1-scnum,scnum); strcpy(p1-plname,plname); strcpy(p1-time,time); p1-price=price; p2=head; if(head=NULL) head=p1; head-next=NULL; else while(p1-dlnump2-dlnum) p2=p2-next; if(p1-dlnumdlnum) if(head=p2) head=p1; else p3-next=p1; p1-next=p2; else p2-next=p1; p1-next=NULL; return head; /*查询功能.*/ void Check(struct tsxx * head) /查询,书名,作者名 struct tsxx * ptr; char a; char bname10; char aname10; printf(“n Choice:n“); printf(“1:bnamen2:anamen“); scanf(“%s“, if(head=NULL) printf(“nN0 Recordsn“); else /链表非空 switch(a) case 1: /按书名查询 printf(“Input bname:“); scanf(“%s“,bname); for(ptr=head;ptr;ptr=ptr-next) if(strcmp(ptr-bname,bname)=0 ) printf(“ dlnum bname aname scnum plname time pricen“); printf(“%5ld %10s %10s %10s %10s %10s %8fn“,ptr- dlnum,ptr-bname,ptr-aname, ptr-scnum,ptr-plname,ptr-time,ptr-price); if(ptr=NULL) printf(“There isnt this static!n“); break; case 2: /按作者名查询 printf(“Input aname:“); scanf(“%s“,aname); for(ptr=head;ptr;ptr=ptr-next) if(strcmp(ptr-aname,aname)=0) printf(“ dlnum bname aname scnum plname time pricen“); printf(“%3ld %3s %3s %3s %3s %3s %3fn“,ptr-dlnum,ptr- bname,ptr-aname, ptr-scnum,ptr-plname,ptr-time,ptr-price); if(ptr=NULL) printf(“There isnt this static!n“); break; default: printf(“Enter error!n“); break; /*浏览功能*/ void Ptrint_Stu_Doc(struct tsxx *head)/浏览 struct tsxx * ptr; if(head=NULL) printf(“nNo Recordsn“); else printf(“nThe Books Information Are: n“); printf(“ dlnum bname aname scnum plname time price n“); ptr=head; while(ptr!=NULL) printf(“ %ld %s %s %s %s %s %6.3f n“,ptr-dlnum,ptr-bname,ptr- aname,ptr-scnum,ptr-plname,ptr-time,ptr-price); ptr=ptr-next; /*.修改功能.*/ struct tsxx * revise(struct tsxx * head) struct tsxx * p1; long dlnum; char bname10; char aname10; char scnum10; char plname10; char time11; float price; printf(“Input the lognumn“); scanf(“%ld“, if(head=NULL) printf(“Not records!n“); else for(p1=head;p1;p1=p1-next) if(p1-dlnum=dlnum) printf(“%ld %s %s %s %s %s %fn“,p1-dlnum,p1-bname,p1- aname,p1-scnum,p1-plname,p1-time,p1-price); printf(“Retype

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论