我的程序设计基础课程设计报告(共14页).doc
精选优质文档-倾情为你奉上程序设计基础课程设计报告班 级: 通信1002班 姓 名: 段光军 指导教师: 完成日期: 2011-09-02 专心-专注-专业(题目)1 设计题目与要求设计内容:要求将输入的图书信息实现信息的删除和修改功能。2 算法设计与描述(要求有相关流程图) 2.1 算法设计与描述删除过程:利用结构体,在for循环语句的作用下对过程进行描述,过程中运用ifelse语句对图书进行删除以及对不存在的书籍的处理进行进一步的说明。修改过程:运用结构体,过程中利用for循环语句作为整体框架,并用if语句和当循环进行描述。过程中对图书的修改及修改的项目类型进行表述和不存在的图书进行处理。. 2.2 流程图 3 设计软硬件环境课程设计的软硬件环境为:IBM PC兼容机,Intel P4以上、1G内存、80GB硬盘、Windows 操作系统,Trubo C+ 3.0、VC6.0以上IDE环境。4 源程序代码清单#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h> struct books_list char author20; char bookname20; char publisher20; char pbtime15; char loginnum10; float price; char classfy10; struct books_list * next; ; struct books_list * Create_Books_Doc(); void InsertDoc(struct books_list * head);void DeleteDoc(struct books_list * head , int num);void Print_Book_Doc(struct books_list * head);void search_book(struct books_list * head);void info_change(struct books_list * head);void save(struct books_list * head); struct books_list * Create_Books_Doc() struct books_list * head; head=(struct books_list *)malloc(sizeof(struct books_list); head->next=NULL; return head; void save(struct books_list * head) struct books_list *p; FILE *fp; p=head; fp=fopen("data.txt","w+"); fprintf(fp," 登录号 书 名 作 者 出版单位 出版时间 分类号 价格 n"); while(p->next!= NULL) p=p->next; fprintf(fp," %-6.6s %-10.10s %-10.10s %-10.10s %-12.12s %-6.6s %.2f n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); fclose(fp); printf(" 已将图书数据保存到 data.txt 文件n"); void InsertDoc(struct books_list *head) struct books_list *s, *p; char flag='Y' p=head; while(p->next!= NULL) p=p->next; while(flag='Y'|flag='y') s=(struct books_list *)malloc(sizeof(struct books_list); printf("n 请输入图书登陆号:"); fflush(stdin); scanf("%s",s->loginnum); printf("n 请输入图书书名:"); fflush(stdin); scanf("%s",s->bookname); printf("n 请输入图书作者名:"); fflush(stdin); scanf("%s",s->author); printf("n 请输入图书出版社:"); fflush(stdin); scanf("%s",s->publisher); printf("n 请输入图书出版时间:"); fflush(stdin); scanf("%s",s->pbtime); printf("n 请输入图书分类号:"); fflush(stdin); scanf("%s",s->classfy); printf("n 请输入图书价格:"); fflush(stdin); scanf("%f",&s->price); printf("n"); p->next=s; p=s; s->next=NULL; printf(" 添加成功!"); printf("n 继续添加?(Y/N):"); fflush(stdin); scanf("%c",&flag); printf("n"); if(flag='N'|flag='n') break; else if(flag='Y'|flag='y') continue; save(head); return; void search_book(struct books_list *head) struct books_list * p; char temp20; p=head; if(head=NULL | head->next=NULL) printf(" 图书库为空!n"); else printf("请输入您要查找的书名: "); fflush(stdin); scanf("%s",temp); while(p->next!= NULL) p=p->next; if(strcmp(p->bookname,temp)=0) printf("n图书已找到!n"); printf("n"); printf("登录号: %stn",p->loginnum); printf("书名: %stn",p->bookname); printf("作者名: %stn",p->author); printf("出版单位: %stn",p->publisher); printf("出版时间: %stn",p->pbtime); printf("分类号: %stn",p->classfy); printf("价格: %.2ftn",p->price); if(p->next=NULL) printf("n查询完毕!n"); return; void Print_Book_Doc(struct books_list * head) struct books_list * p; if(head=NULL | head->next=NULL) printf("n 没有图书记录! nn"); return; p=head; printf(" 登录号 书 名 作 者 出版单位 出版时间 分类号 价格 n"); while(p->next!= NULL) p=p->next; printf("%-6.6s %-10.10s %-10.10s %-10.10s %-12.12s %-6.6s %.2f n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); printf("n"); void info_change(struct books_list * head) struct books_list * p; int panduan=0; char temp20; p=head; printf("请输入要修改的书名:"); scanf("%s",temp); while(p->next!= NULL) p=p->next; if(strcmp(p->bookname,temp)=0) printf("n 请输入图书登陆卡号:"); fflush(stdin); scanf("%s",p->loginnum); printf("n 请输入图书书名:"); fflush(stdin); scanf("%s",p->bookname); printf("n 请输入图书作者名:"); fflush(stdin); scanf("%s",p->author); printf("n 请输入图书出版社:"); fflush(stdin); scanf("%s",p->publisher); printf("n 请输入图书出版时间:"); fflush(stdin); scanf("%s",p->pbtime); printf("n 请输入图书分类号:"); fflush(stdin); scanf("%s",p->classfy); printf("n 请输入图书价格:"); fflush(stdin); scanf("%f",&p->price); printf("n"); panduan=1; 5 if(panduan=0) printf("n 没有图书记录! nn"); return; void DeleteDoc(struct books_list * head) struct books_list *s,*p; char temp20; int panduan; panduan=0; p=s=head; printf(" 请输入您要删除的书名:"); scanf("%s",temp); while(p!= NULL) if(strcmp(p->bookname,temp)=0) panduan+; break; p=p->next; if(panduan=1) for(;s->next!=p;) s=s->next; s->next=p->next; free(p); printf("n 删除成功! n"); else printf(" 您输入的书目不存在,请确认后输入!n"); return; int main(void) struct books_list * head; char choice; head=NULL; for(;) printf(" socat 图书管理系统 n"); printf(" 1图书信息录入 n"); printf(" 2图书信息浏览 n"); printf(" 3图书信息查询 n"); printf(" 4图书信息修改 n"); printf(" 5图书信息删除 n"); printf(" 6退出系统 n"); printf(" 请选择:"); fflush(stdin); scanf("%c",&choice); if(choice='1') if(head=NULL) head=Create_Books_Doc(); InsertDoc(head); else if(choice='2') Print_Book_Doc(head); else if(choice='3') search_book(head); else if(choice='4') info_change(head); else if(choice='5') DeleteDoc(head); else if(choice='6') printf("n"); printf(" 感谢使用图书管理系统 n"); break; else printf(" 输入错误,请重新输入!"); break; return 0;5 程序运行结果6 设计总结经过上一个学期对C程序设计的学习,我们已经掌握了丰富的理论知识。知道了C语言是现在国内外广泛使用的一种计算机语言,它不仅具有功能丰富,表达能力强,使用方便灵活,应用面广,目标程序效率高,可移植性好的优点而且又具有低级语言的许多功能同时还可以编写系统软件。因此C语言为广大计算机应用人员和专业工作者所喜爱,也因为这一点注定了C语言在当今社会必将发挥的巨大的作用。在上个学期的学习过程中我们初步了解了C语言程序设计的基本思想而且在上机实践过程中经过老师的指导积累了一定的程序设计的经验。虽然在上机过程中总是漏洞百出,也经常会犯一些让人头疼的错误。但是一旦出现的错误得以纠正我们不但不会感到厌倦反而会有些乐此不疲。我知道这些丰富的理论知识和实践经验不仅为我们的下一步的学习打下了坚实的基础,而且使我们的学习显得更加轻松而不会因为多方面的原因而感到枯燥无味。由于C语言牵涉的概念比较复杂,规则繁多,虽然使用灵活但是很容易出错。为此不少的初学者在程序的编写和调试过程中会逐渐产生一种无力甚至是无助的感觉。俗话说的好“艰辛知人生,实践长才干”不曾遇到困难有如何加强和巩固逐渐所学的知识呢?在这次课程设计的实践过程中,虽然老师布置了八道不同的题目,仔细审查后却发现它们全都是大同小异。其基本要求是在文件中对信息的输入、修改、删除和对文件信息的查询功能。幸运的是我们这个小组被分到的是不太难的第七道题,它的主要内容是设计图书信息管理程序,要求将输入的图书信息保存到文本文件中、并实现对图书信息的增加、删除、修改和检索功能。因为是分工协作我的主要任务是对图书信息的删除和修改功能程序的编写。因为长时间没有接触书本的原因以前所学的知识已经淡忘,开始编写的时候感觉非常棘手,或者说是感觉自己无从下手。在万般无奈之际,辅导老师说可以上网查找资料。这句话对我来说无疑是像快要溺水的人一下子抓住了一课救命的稻草。经过简单的上网搜索,我们小组很快找到了相关的资料,本以为根据所查找的资料会使这次设计很轻松的完成。但是俗话说得好啊“天上不会掉馅饼”,经过调试却发现所下载的程序居然是错误百出的。虽然我们有点失望,但这个有错的例子却让我们看到了一丝黎明前的曙光。最起码它已经为我们把基本的框架写好了,我想只要经过适当的修改就可以使用了。在编写删除模块时,我的设计方法是在事先下载好的程序中把自己所需要的删除模块从整体程序块中筛选出来,并以其中的内容作为模板按照所给出的样式编写属于自己的程序块。在编写前我计划使用ifelse语句以及利用“当循环”和for循环作为程序模块的整体框架利用指针来找到图书并实现删除指定书籍的目的。但是在整个循环过程中要找到想要删除的书籍却是整个设计方法中的难点亦是这个程序的关键所在。所以在开始编写程序模块时如何使用正确的C语句找到所要求删除的图书成了第一个我所要跨越的障碍。因此一切设计都是围绕如何找到指定图书而展开。在当时设计编写方案时我们小组考虑了是否要对进行删除的图书在选择删除命令后显示出是否删除的对话框,因为在我们查找的第一篇资料中有这么一段程序,但我却觉得加上这一句也是多此一举,既然已经选择了删除何必还要加这句呢?不仅如此,因为水平限制我们在编写过程中很可能会出错,所以最终还是决定不添加那一段了。我实现这个目的所运用的技术手段是充分利用在课堂上所学的知识,准确的使用for循环和“当循环”同时使用ifelse语句来判定所给的条件是否满足,利用指针在循环过程中找到所要删除的书籍。因为在删除时并不需要对书籍的所有信息进行是否要删除的讨论。这样也使得在程序编写的过程中大大简化了模块的结构,同时也相应的减小了程序设计的难度。通过实践我发现这段程序的功能是对指定的图书进行删除并且在删除过程中对不存在的图书的相关处理提示,在删除成功后出现“-删除成功-”字样的系统提示。程序模块很好的实现了所要求的功能。不仅如此根据编译系统所显示出的画面完全符合任务书中要求界面友好的标准。在编写修改模块是,我的设计方法是把样本模块从下载的整体模块中截切出来并以筛选出来的样本为例,根据其中的具体内容经过适当的修改整理出合适自己的程序模块。在编写这个删除模块前我们小组从查出的资料中获得了两种编写方案,一种是对书籍的各个类型进行分类的修改每次只修改一个项目类型,这种方案在只要求修改一个项目时非常方便。另一种方案是一次性对所有的项目进行修改。考虑到前者虽然在修改一个项目类型时具有很大的优越性但是当要求同时修改两个或者两个以上的项目时就必须修改多次,无意间加大了工作量,而后者虽然一次要修改全部的项目但在要求修改多个时相对前者来说确实轻松了许多。众所周知,只有好的办事效率才可能创造更好的经济效率。所以综合多方面的因素,我们选择了一次性修改全部类型的设计方案。我实现这个目的所运用的技术手段是准确使用指针在以当循环和if语句为整体框架在循环过程中精确找到所要求修改的图书,并一次性输入新的图书内容以达到修改图书信息的目的。在程序运行的过程中我发现这个模块的功能是对指定图书的基础内容进行修改例如登陆卡号,书籍名称,图书作者,出版社及出版时间和图书的价格等等。很好的实现了对书籍的修改作用,因为可以对图书的所有基本内容进行一次性的修改大大提高了书籍内容修改的效率,总而言之,这段程序完美的实现了所要求的功能。通过本项课程设计我深深地体会到编写一个功能完善的程序是多么的不容易。虽然编写困难,但是在程序的编写过程中不仅培养了我独立思考、综合运用所学有关理论知识和上网查找资料准确性的能力而且掌握了工程软件设计的基本流程和方法,强化上机动手编程以及程序调试的能力,闯过了理论与实践紧密结合的难关!与此同时在这次课程设计中也清楚的了解到了自己的动手能力不足还有待进一步的提高!在设计过程中不能够很好的把书本上的理论知识与实践相结合,从而间接的增加了程序设计的难度。人们总说团队的力量是巨大的,在本次设计过程中我更深的体会到了团队合作的重要性。俗话说:“三个臭皮匠比上一个诸葛亮。”知道了只有团队合作才会更好的完成程序的设计!也体会到以后在工作中团队合作的必要性和重要性!这次经过我们小组的所有组员的合作在短暂的一周时间内把程序调试的基本合格,就我个人来说这是相当不容易的。虽然程序不是很完善而且大部分是借鉴所下载下来的资料,但是我们还是付出了很多。不管是程序的修改还是调试对于我们这种只学了C语言皮毛的新人来说都不是一件容易的事。借鉴也罢自己编写也罢,总之我们努力了。可以说在一定程度上我们问心无愧。在程序最终被调试好的那一刻,我心中激动无比,因为我们的付出有了回报。而最终结果的出现我们也有一种淡淡的成就感和自豪感。总而言之,通过完成本次C程序设计课题,以前在课堂上所掌握的理论知识得到了进一步的巩固,并且使我得以更好的掌握语言这门世纪走在世界前列的高级语言。经过一个多礼拜的努力拼搏,我们有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个多礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。提高了自己的能力,为以后自己能够更好的融入社会打下来坚实的基础。参考文献1谭浩强编著。C程序设计(第3版)。北京:清华大学出版社,2005。要求:字体为宋体,字号为五号,行距为单倍,字数不少于3000字。