课程设计报告 C语言_c语言课程设计报告

2020-02-27 其他范文 下载本文

课程设计报告 C语言由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课程设计报告”。

课 程 报 告 课 程 名 称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 程序设计实践 ****** 20104683**** 任 课 教 师 : 学 2010期 :2010-2011 学年第二学期 课程报告任务书 课程报告任务书 报告 题 目 图书信息管理系统 开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量 等)。使之能提供以下基本功能 基本功能 基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入?(2)图书信息浏览功能--输出 主要 内容(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式): ? ①按书名查询 ②按作者名查询 ③ 按照价钱排序 ④按出版时间排序等等(4)图书信息的删除与修改 扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打 功能 印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询(5)综合查询(6)统计功能 比如统计处某一类别的图书信息 或 筛 选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。

一、提交材料应包括:(1)系统源代码(2)课程报告

二、整个设计过程具体要求(1)需求分析 需求分析 任务 要求 要求学生对案例系统进行分析,设计出需要完成的功能,完善 各个模块的调用关系;(2)设计过程 要求学生进一步明确各模块调用关系,进一步完善模块函数细节 设计过程(函数名、参数、返回值等)(3)实现过程 要求学生养成良好的编码习惯、完成各个模块并进行测试,最终 实现过程 完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。总结阶段 报告撰写情况(报告撰写情况(30 分)内容 规范程度 程序测试 20 分 5分 5分 系统完成情况(答辩情况(系统完成情况 30 分)答辩情况(40 分)完成 基本功能 扩展功能 自述情况 答辩情况 20 分 10 分 10 分 30 分 成绩 评定 总分 成绩评定教师: 成绩评定教师: 教师 1 需求分析 经过大一上学期的理论学习,在基础实验的基础上,本学期我们继续开设了 C 语言程序 设计实践课。课程要求我们对已经学习的基础实验进行整合与衔接处理,并最终形成一个系 统性质的规模较大的程序。本次课程设计要求我们达到能独立完成一个图书管理系统,完成后要求实现的功能有对 图书信息的录入、删除、修改,浏览(即输出)按某种方式查询(要求至少一种查询方式),按某种方式排序(要求至少一种排序方式)。当然,我们可以根据自己的能力对系统进行完善 性的拓展,例如自己加入简单的权限处理,统计功能,模糊查询等,甚至可以拓展为图书借 阅系统。通过整个程序的开发过程,最终使我们掌握利用计算机解决实际问题的基本方法,熟悉 C 语言开发的全过程,提高综合应用 C 语言的能力、编程和调试能力,为学习计算机和通信 专业的后续课程打好专业基础。2 概要设计(1)图书信息及数据格式 图书信息: 图书信息包括图书编号、图书类别、图书书名、作者、出版社、出版时间、图 书价格。数据格式: 本系统采用单向链表来对图书信息进行各项操作。其中图书的编号为整型数 据,价格为双精度浮点型,其余的类别、书名、作者、出版社与出版时间均为字符 串类型 struct tushu_node{ int num;char leibie[20];char name[30];char author[20];char pre[20];char time[20];double price;struct tushu_node*next;};一个结点的示意图如下图所示: num leibie name author pre time price next(2)程序的整体框架 主菜单 录 入(删 除 修改)按 不 同方 式 查询 浏览 按 不 同方 式 排序 统 计 图书 数 目 帮助 退出 创 建 删 除 修 改 编 书 价 号 名 格 价 格 出版 时间 子菜单(3)模块划分

1、int quanxian();

2、int inputchioce();

3、void save();

4、void save1();核查权限的函数 显示主菜单的函数 保存链表为文件的函数 覆盖以前的信息 保存链表为文件的函数 不覆盖以前的信息 只在创建时调用

5、struct tushu_node* wjtolb();从文件中读取数据并建立图书信息的链表的函数

6、int luruxinxi();录入学生信息的函数 创建图书信息的函数 插入图书信息的函数

7、struct tushu_node * luruxinxi_chuangjian();

8、struct tushu_node * luruxinxi_charu();

9、struct tushu_node * luruxinxi_shanchu();

10、struct tushu_node * luruxinxi_xiugai();删除图书信息的函数 修改图书信息的函数

11、int liulantushu();浏览图书信息的函数

12、int chaxuntushu();

13、void chaxuntushu_num();

14、void chaxuntushu_name();

15、void chaxuntushu_price();查询图书信息的函数 按编号查询图书 按书名查询图书 按价格查询图书

16、void paixutushu();

17、struct tushu_node* paixutushu_price();

18、struct tushu_node* paixutushu_time();

19、void sfjx();为图书排序的函数 为图书按价格排序的函数 为图书按出版时间排序的函数 写个函数 判断是否继续 排序中使用 20、int tongjitushu_shumu();统计图书数目的函数

21、void shiyongshuoming();使用说明的函数 3 详细设计 程序的主体设计思想是根据结构化程序设计思想分模块进行设计,有一个主函数和多个 自定义函数构成。主函数 对于本程序来说,主函数很简单,就是定义了一个变量 chioce 用来接受核查用户是否 有使用该管理系统的权限的函数 quanxian()函数返回的值,若为 1 即用户获得了使用权限)(,则调出显示主菜单的函数进行具体操作 int { int chioce;chioce=quanxian();核查用户是否有使用该管理系统的权限的函数 main()if(chioce==1){ system(“cls”);inputchioce();} exit(0);} 权限函数 若取得权限 则返回值为 1 用来显示主菜单的函数 核查用户权限的函数使用 do-while 语句来限制用户输入密码的次数仅为三次,并且为了 使界面更具亲切感,会在用户输入密码错误时进行提示引起用户注意及提示剩余输入次数。int quanxian(){ int m=1,n=3,flag=0;char mima[20];do{ printf(“nn 你 好,欢 迎 使 本 图 书 信 息 管 理 系 统!n”);printf(“n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“【现在进行权限核查】 次输入密码的机会!n”);printf(“n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n if(n==2||n==1){printf(”注意:你已输入错误%d 次 密码:“,3-n,n);} if(n==3)printf(”剩余输入次数: %d 请输入密码:“,n);剩余输入次数: %d ”);请输入 n--------------------友情提醒:你共有 3 scanf(“%s”,mima);//第一次输入和输错密码后再次输入显示的也卖弄不同 if(strcmp(mima,“chenbo0916”)==0){ flag=1;return flag;} m++;n--;system(“cls”);}while(strcmp(mima,“chenbo0916”)!=0&&mnum p->leibie p->name p->author p->pre p->time p->price Head 为空 Head=p Head 不 为 空 Tail->next=p 保存为文件 Save()将链表数据保存为文件的函数 首先打开文件以可读写(也可以只写的方式打开 区别在于是否覆盖以前的信息)的方式,p1 作为形参来接受实参 head,只要不为空,写入 p1 后,下移一个节点 void save1(struct tushu_node* p1){ /*将链表保存为文件的函数 不覆盖前面信息 if((fpp=fopen(“1.txt”,“a”))==NULL){ printf(“打开文件失败!”);exit(0);} while(p1!=NULL){ */ fprintf(fpp,“ %d %s %s %s %s %s %lfn”,p1->num,p1->leibie,p1-> name,p1->author,p1->pre,p1->time,p1->price);p1=p1->next;} if(fclose(fpp)){ printf(“关闭文件失败!n”);exit(0);} } 从文件中读出数据并创建链表的函数 在调用从文件读取数据创建链表的函数前,先定义 head 链表指针并赋值为空作为实参。打开文件后,从文件中读取一组数据赋给已经被动态分配内存的结点指针 p 第一次 head 为空时 Head P next p1 第二次以后 head head P1->next p2 P next p1 head P1->next P next p2 p1 删除函数 删除函数执行流程图及算法如下图所示: 调浏览函数浏览 全部图书方便看 需要删除那一本 输入需要删除图 书编号 numm 调用读取文件并 形成链表的函数 具体删除过程 Head Head=NULL Return Head!=NULL Head->num 相等(即删除头结点)Numm 比较 head=head->next 不相等(删除其他结点)Ptr1=head Ptr2=head->next Ptr2!=NULL(即不是链表结尾 循环结束条件)Ptr2->next=ptr1-> next 重新保存 覆盖 原来文件中数据 选择是否继续操 作返回主菜单 While 循环 Ptr2->num Numm 比较 相等 不相等 Ptr1=ptr2 Ptr2=ptr1->next Save()函数 重新保存文件 修改函数 修改函数执行流程图如下: 先遍历所有图书信息 方便选择要修改编号 调用文件到链表函数 输出一个显示选择修 改具体成分的界面 输入需要修改的图书 编号 If(Head!=Null)Head->num Numm 比较 不相等 相等 选 择 具体 修 改成分 while(p!=NULL&&p->n um!=numm){ p=p->next;} 直到相等 Swith 语句 输入新的成分替 换原有图书信息 的成分 Save()保存至文件 是 询 问 是否 继 续 否 返回主菜单 浏览遍历函数 重新定义一组变量 num、leibie、name、author、pre、time、price,将从文件中读 取一组数据后赋给这组变量并输出它们,使用 while(!feof(fp)),一直执行上述过程实现 遍历浏览全部文件中的图书信息。浏览完成后,同样有对是否继续其他操作的询问,如果选 择继续,则会返回主菜单。int liulantushu(){ int num;char leibie[10];char name[30];char author[20];char pre[20];char time[20];double price;int x=-1;/* 浏览图书信息的函数 */ if((fpp=fopen(“1.txt”,“r”))==NULL){ printf(“ exit(0);} else{ printf(”nn 编号 while(!feof(fpp)){ fscanf(fpp,“%d%s%s%s%s%s%lf”,&num,leibie,name,autho r,pre,time,&price);printf(“%d %s %s %s %s %s %lfn 类别 书名 作者 出版社 出版时间 价格n”);打开文件失败!“);”,num,leibie,name,author,pre,time,price);} } if(fclose(fpp)){ printf(”关闭文件失败!n“);exit(0);} printf(”nn 是否继续操作? 请选择(继续-1/退出-0)“);scanf(”%d“,&x);if(x==1){ system(”cls“);inputchioce();} if(x==0){ printf(”nn 谢谢你的使用!exit(0);} if(x!=1&&x!=0){ system(“cls”);printf(“选择有误,默认返回主菜单,请重新选择:n”);inputchioce();} } 统计图书数目的函数 统计函数简单的实现了对图书数目的统计,其实现思路可以看做在浏览函数的基础上去 掉一些不必要的输出而是另外加上一个变量 n 用在 while 中执行一次循环就 n++一次,就能 统计出图书的数目了,不再具体叙述。由于 feof()函数本身的原理,如果每次写入一行数据 到文件中时最后有换行符号,则会出现 n 多加一问题或输出时最后一行复制,只要将 n 减一 即为图书实际上的数目。查询函数 再见n“);查询函数算法如下图所示: found=0 p=head flag=0 输入要查询的图书 的编号/书名/价格 P P!=NULL 比较 P 中相应的部分 与要查询的是否相 等 不相等 相等 输出查询到的信息 found=1 P=p->next 如果 found 依然为 0,则输出“未找到某图书” 是 询问是否继续 否 返回主菜单 排序函数 排序函数算法叙述如下: 排序函数使用冒泡排序的算法,定义了 i j 两个变量来控制实现双层循环,for(i=1;inext head A B C 辅助 P3 p1 p2 比较 p1 与 p2 的排序项,如 p1 比 p2 小,上图所有指针的指针均后移一位 相反,若上图中 p1 比 p2 大,则变为 P3 A B C P3->next P2->next p1 p2 简单的说———始终是 p1 与 p2 比较,其中一个为前一次比较中的的大的一个,另一个向 后移动 内循环源程序 p4=(struct tushu_node*)malloc(size);p4->next=head;p3=p4;p1=head;p2=head->next;for(j=0;jprice>p1->price){ p3=p1;p1=p2;p2=p2->next;} else { p1->next =NULL;p1->next=p2->next;p3->next=p2;p2->next =p1;p3=p2;p2=p1->next;} } head=p4->next;free(p4);4 调试分析 程序的编写过程中调试时遇到的问题及如何解决: 问题一 界面不美观,进入一次系统只能进行一项操作的问题)解决方法 通过将主菜单的显示作为一个独立的函数(inputchoice(),结合函数的嵌套调 用实现,与清屏函数(system(“cls”)一起,在每次进行完一次具体操作都有以下询问)printf(”nn 是否继续操作? 请选择(继续-1/退出-0)“);scanf(”%d“,&x);if(x==1){ system(”cls“);inputchioce();} if(x==0){ printf(”nn 谢谢你的使用!再见n“);exit(0);} if(x!=1&&x!=0){ system(”cls“);printf(”选择有误,默认返回主菜单,请重新选择:n“);inputchioce();} 实现了每次操作完成后,使只显示主菜单可继续进行其他操作 问题二 权限系统以前是输入学号后三位(int)进行验证并且只有一次输入机会,一次输入错 误就退出系统 解决方法 在权限函数中使用字符串变量(char)来作为密码,使用 do-while 语句来实现对 输入次数的控制 问题三 录入时以前的思路是想在输入的同时写入文件只有一组数据想存入文件 解决方法 将保存文件作为一个独立的函数。在创建函数中有一组另外的参数来接收用户输 入的数据,然后再调用保存函数将数据存入文件 问题四 文件的保存与读取问题 解决方法 由于系统要求结合文件的知识使用户的数据在一次输入之后即使关闭退出系统后 在次进入系统时原有数据依然能继续使用。并且在对数据进行创建、删除、修改、排序等相 关的操作之后要重新保存,所以将将链表保存到文件和从文件读取数据建立链表都重新写作 单独的函数,在进行完相关的操作后都调用 save()重新保存,在再次进行操作前就先调用 wjtolb()函数从文件中读取数据创建链表,实现了对数据更及时的保存与利用 问题五 保存数据时覆盖不覆盖原有数据的问题 解决问题 由于以前没有注意细节问题导致虽然数据被修改或是删除后保存成功,但数据不 覆盖原来的数据从而出现文件中数据重复保存的问题,解决方法很简单,只要将打开文件的 方式由可读可写(a)改为只写方式打开(w)就行 问题六 输入时无法结束输入的问题 解决方法 由于在输入时时先输入图书的编号,所以在输入时除了输入第一本图书的信息,即在输入第一本图书之后在输入时先输入图书的编号,加上一个判断循环 while(num!=0)才 继续输入完这本图书的其他信息,即 0 可以作为输入结束标志 问题七 程序漏洞,只有第二本图书信息无法修改的问题 解决方法 程序设计思路有问题及对 do-while 语句了解不充分导致了问题。修改函数的思路 是先让用户先输入要修改的图书编号再依次查询,先看头结点的图书编号与要修改的编号是 否相等,如果相等继续选择要修改的图书信息成分修改,如果不相等,有个循环语句来使结 点后移只带相等再选择要修改的图书信息成分修改。有问题的写法是使用了 do { p=p->next;} while(p!=NULL&&p->num!=numm)从而导致了如果要修改的图书不是第一本而是第二本时,先执行了后移一个结点直接到第三 个结点即无法修改第二本图书的信息。解决后是用 while 循环 while(p!=NULL&&p->num!=numm){ p=p->next;} 就不存在上述问题 问题八 要对图书的信息进行删除后修改前必须先浏览图书不然不知道要选择哪本图书进行 操作的问题 解决方法 由于上述修改与删除的操作是通过用户对图书编号的选择来完成的所以在浏览前 不知道图书对于的编号就使操作具有盲目性即对图书的信息进行删除后修改前必须先浏览图 书。解决时时让修改于删除函数中让用户输入编号前默认直接输出所有图书(遍历所有图书)5 测试结果 编号 类别 4 2 传记 英语 书名 让世界因你而不同 四级词汇 作者 李开复 俞敏洪 出版社 北京工业出版社 群言出版社 出版时间 价格 2008.3 2008.9 28.000000 32.000000 5 3 1 6 7 8 漫画 营销 杂志 教材 教材 教材 我兔斯基你 哈佛市场营销策略 电脑爱好者 思修 大学英语 高等数学 王卯卯 宋海峰 无 罗国杰 王大伟 蒋青 动漫出版社 内蒙古出版社 cfan 杂志社 高等教育出版社 外研社 高等教育出版社 2009.3 2010.4 2010.9 2006.8 2005.1 2007.6 32.000000 28.000000 6.000000 15.50 34.9 25.9 现在给出一组测试数据来全程展示本图书管理系统的所有功能 功能一之核查用户权限: 功能一之核查用户权限: 首先进入系统,你会发现要求对用户使用权限进行核查的界面:(效果图如下)若密码为错误密码,那么你会看到提醒“注意”的界面 上图密码正确,则仍然可以顺利进入系统见到主菜单 如下图 若三次输入错误 将无法进入系统 功能二之浏览全部图书: 功能二之浏览全部图书: 在主菜单界面选择 3 则可遍历现有全部图书信息 功能三之创建或添加图书: 功能三之创建或添加图书: 选择 1 后进入录入(删除 修改)子菜单 继续选择 1 进入创建添加图书功能 以 0 结束输入 结束后自动返回主菜单 再次选择 3(浏览)可查看添加效果(浏览时刚才上图添加的图书信 息“9 IT FLASH8 尹浩琼 电子工业出版社 2006.9 41”显示在最后一行说明程序已经实现了 添加功能)功能四之为图书按规则排序: 功能四之为图书按规则排序: 选择 4 后进入排序子菜单进一步选择按何种规则排序(报告只演示按出版时间排序)当选择 2—按出版时间排序 然后回车键你会看到 选 1 继续返回浏览看到图书已经按出版时间的先后排序完成 功能五之按规则查询图书: 功能五之按规则查询图书: 同排序一样你可以在子菜单选择按何种方式查询(报告只演示按书名查询)选择按书名查询后你可以输入书名 查询图书《当代大学生》的结果是“没有找到这本书” 选择 1 继续按书名查找其他图书 查找到图书《让世界因你而不同》时,这本图书的信息将被全部输出,如图: 功能六之修改已有图书信息: 功能六之修改已有图书信息: 从录入子菜单 1 进入后选择 3 可以进入修改功能 方便你选择要修改哪本图书 首先你会看到目前文件中所有图书的信息 上图选择了修改编号为 1 的图书 现在编号为 1 的图书的信息单独显示出来 提示界面选择修改图书 1 的哪一项成分 你可以再次根据 我们看到图书 1 的作者为“无” 决定将它改为“陈波”(如下图)完成后可以利用浏览函数同样可以查看到修改后的效果 修改成功 功能七之按编号删除某本图书: 功能七之按编号删除某本图书: 选择要删除图书的编号前你也会看到目前所有图书的信息 现在选择删除编号为 8 的图书 浏览看到编号为 8 的图书已被成功删除 功能八之简单的统计功能(统计图书总数目)功能八之简单的统计功能(统计图书总数目): 主菜单中选择 5 即可统计出图书总数目(上图看出还剩余编号为

1、2、3、4、5、6、7、9)八本图书 i 统计正确 现在基本功能演示完毕 选择 0 退出系统 为了完善 系统也设计了一个帮助功能对系统的使用方法做了简单的介绍 6 课程心得总结 经历了几个星期的课程设计,从设计前期的不知如何下手到开始设计时的各种错误的困 扰再到一个个的攻破各个问题,最后到对程序的进一步完善与课程报告的撰写。这一段时间 我们由被程序困扰到几乎崩溃到最后成就感的油然而生;从一整天的坐在电脑屏幕面前到现 在的带着喜悦一遍一遍运行着程序;一遍遍的互相探讨解决大家遇到的问题到越来越发现编 程的有意思,我到现在真的感觉认真自己做完这样一个系统收获颇大:(1)对结构化程序设计与函数的嵌套调用有了更清晰具体的认识(2)对链表的操作更加熟练,更清晰的认识到链表与其他我们前面学习的数据类型(如 结构体)的区别与联系,及使用方法上的异同(3)明确认识到链表的循环操作要注意到的是前一部分对某某进行操作处理,而后要 分析好对于如何实现对某某重新赋值等变化来实现继续循环(4)引入了文件知识可以对电脑硬盘上的数据操作,改变了对 C 语言的狭义认识,认 识 到 C 语言实际上还可以实现更复杂丰富的功能来利用开发的软件来进一步实现 对现实中的问题的解决(5)学习到C语言的学习一定不不能忽视一个很小很小的细节,因为完全会导致不同 的结果(6)对如何用C语言来完成一个较大的系统的整体思路有清晰的认识

C语言课程设计报告

C语言课程设计报告班级:10电子本1学号:10303033122姓名:指导老师:方文森完成日期:温州大学城市学院课程设计目 录1、课程设计目的和要求 .......................................

C语言课程设计报告

目录 1前言 ..............................................................1 2正文 ..............................................................1 2.1设计目的 .........

C语言课程设计报告

C语言课程设计报告--学生成绩管理系 C语言课程设计报告: 学生成绩管理系统 系统需求一、当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计......

C语言课程设计报告

C语言课程设计报告1.实验题目:职员信息管理系统2.数据结构:整型int,字符型char,长整型long,结构体及结构体数组 3.源代码 :#include"stdio.h" #include"string.h" #define......

C语言课程设计报告

C语言课程设计报告Experiment Designing reporter课程名称 : C语言课程设计 英文名称 : C Program Experiment Designing 专 业 : 学 号 : 姓 名 :指导教师 :日 期: 2011年7月18......

《课程设计报告 C语言.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
课程设计报告 C语言
点击下载文档
相关专题 c语言课程设计报告 报告 课程设计 语言 c语言课程设计报告 报告 课程设计 语言
[其他范文]相关推荐
[其他范文]热门文章
下载全文