第一篇:课程设计报告 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 press[20];char time[20];double price;struct tushu_node*next;};一个结点的示意图如下图所示: num leibie name author press 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&&m<=3);// 限制输入次数在 3 次之内 printf(“nn 对不起,你连续三次输入密码错误,没有使用该图书管理系统的权限!n”);exit(0);} 显示主菜单的函数 本程序将主菜单单独作为一个函数是为了让用户进入一次系统可以进行多项操作(即为 在每次用户完成一个具体的操作后,都会有对是否继续或返回主菜单有相应的询问,让用户 在想退出系统时才退出),基本思路是通过函数的嵌套调用来实现多项操作。这个函数的功能 就是显示主菜单并对用户进行的选择调用不同的子菜单函数或进入具体功能 int inputchioce(){ int mychioce,x=-1;printf(“n++++++++++++++欢 迎 你++++++++++++++++++nn”);printf(“**+++++++++++++ 主 菜 单 +++++++++++++++++++++**n”);printf(“**1--录入(删除 修改)图书信息 ** **2--(按规则)查询图书信息 **n”);printf(“** printf(”** printf(“** 3--浏览图书信息**** 5--统计图书(数目)0--退出系统 4--为图书(按规则)排序 **** 6--帮助 **n”);**n“);**n”);/* 主菜单 */ ** ** printf(“**++++++++++++++++++++++++++++++++++++++++++++++++++++++++**n”);printf(“n 恭喜你获得使用权限,请你选择:”);scanf(“%d”,&mychioce);switch(mychioce){ case 1: { case 2: { chaxuntushu();break;} luruxinxi();break;} case 3: { case 4: { case 5: { liulantushu();break;} paixutushu();break;} tongjitushu_shumu();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();} break;} 再见n”);case 6: { case 0: { printf(“ nn 谢谢你的使用!再见 nn”);break;} shiyongshuoming();break;} default: { system(“cls”);printf(“n 选择有误,请重新选择:n”);inputchioce();}break;} } 关于一些录入(修改)查询、、查询 关于一些录入(删除 修改)查询、排序等子菜单的原理及实现方法与主菜单那类似、创建(插入)创建(插入)函数 算法如下图: num 结束输入控制条件 Num!=0 Leibie Name Author Press Time price p->num p->leibie p->name p->author p->press 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->press,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、press、time、price,将从文件中读 取一组数据后赋给这组变量并输出它们,使用 while(!feof(fp)),一直执行上述过程实现 遍历浏览全部文件中的图书信息。浏览完成后,同样有对是否继续其他操作的询问,如果选 择继续,则会返回主菜单。int liulantushu(){ int num;char leibie[10];char name[30];char author[20];char press[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,press,time,&price);printf(“%d %s %s %s %s %s %lfn 类别 书名 作者 出版社 出版时间 价格n”);打开文件失败!“);”,num,leibie,name,author,press,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;i
第二篇:C语言课程设计报告
C语言课程设计报告
班
级:
10电子本1
学
号:
10303033122
姓
名:
指导老师:
方文森
完成日期:
温州大学城市学院课程设计
目 录
1、课程设计目的和要求.....................................................................................................2
2、课程设计任务内容.........................................................................................................2
3、详细设计说明.................................................................................................................3
3.1分析.........................................................................................................................3 3.2软件设计.................................................................................................................3 3.3软件调试(对编程中的错误进行记录,并给出你的解决办法).....................3
4、软件使用说明.................................................................................................................4
5、课程设计心得与体会.....................................................................................................4 附录1:参考文献................................................................................................................5 附录2:部分程序清单(带有较详细的注释)................................................................5
温州大学城市学院课程设计
C语言课程设计报告
1、课程设计目的和要求
目的:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握(2)掌握C语言编程和程序调试的基本技能(3)利用C语言进行基本的软件设计(4)掌握书写程序设计说明文档的能力(5)提高运用C语言解决实际问题的能力 要求:(1)分析课程设计题目的要求(2)写出详细设计说明
(3)编写程序代码,调试程序使其能正确运行(4)设计完成的软件要便于操作和使用(5)设计完成后提交课程设计报告
2、课程设计任务内容
1)一个班级有4个学生,共学习5门课程(大学英语、高等数学、C语言程序设计、VB程序设计、大学语文)。要求编写程序完成相应功能。2)
输入并保存]5门课程名称;
3)
输入并保存]4个学生的学号及其[个人相关信息]; 4)
输入并保存]每个学生对应的每门课程成绩; 5)求出每门功课的平均分;
6)找出有两门以上功课不及格的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;
7)找出平均成绩在90分以上或者全部课程成绩在85分以上的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;
8)计算每位学生的总分,并按总分进行排名,按由高到低输出他们的学号及总成绩; 9)对前面问题进行优化,即在一维数驵的基础上,考虑采用二维数组、函数及其参数传递的方式来解决相关问题;
10)对前面问题进行优化,在学号的基础上,增加学生的其它个人信息,包括:学号、姓名、年龄、性别,并采用结构体形式加以表示; 11)利用文件实现对输入及分析输出数据的存取操作。
12)参照教材P27页,3-11题引入选择功能,输入功能编号可以实现以上功能(考虑清屏函数,自查)。
温州大学城市学院课程设计
3、详细设计说明
3.1分析
3.2软件设计
开始菜单(功能选择)Key=?Key=1Key=2Key=3Key=4Key=5Key=0Key=99Key=6Key=7Key=8Key=9Key=10写入课程名读取课程名输入学生信息读取学生信息建立了学生信息及课程名称?退出程序读取课程、学生、成绩读取课程成绩输出功课的平均分两门以上功课不及格的学生输出高分的学生总分由高到低排序No保存保存Yes输入课程成绩(提示)必须输入课程名称、学生信息才能建立成绩保存清屏
3.3软件调试(对编程中的错误进行记录,并给出你的解决办法)
取地址。
温州大学城市学院课程设计
4、软件使用说明
1.2.3.4.5.6.7.8.9.10.11.12.[99]读取课程、学生、成绩 [1]输入课程名称.[2]读取课程名称.[3]输入学生信息.[4]读取学生信息.[5]输入课程成绩.[6]读取课程成绩.[7]功课的平均分.[8]两门以上功课不及格的学生 [9]-高分的学生-.[10]学生总分排序.[0]退出应用程序.5、课程设计心得与体会
在大家的共同努力下,忙碌了两个星期,我们顺利完成了对此程序的编译及试运行。在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。
另外平时学习c语言的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。为了解决此类问题,最好就是多向同学,老师请教,查找资料。
设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。
感谢这次的课程设计,它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。当然团队合作也是非常重要的一个环节,这会使你在学习过程中倍感轻松
总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:C语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。C语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认
温州大学城市学院课程设计
识。
附录1:参考文献
《C语言程序设计与实践教程》
附录2:部分程序清单(带有较详细的注释)
#include
#define N 4 #define M 5 #define Debug 1
typedef struct { char SNo[5];char SName[10];}Student;
void ScoreRead(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i 温州大学城市学院课程设计 void ScoreWrite(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i void CoureseRead(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;char ch;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} i=0;j=0;while(1){ ch = fgetc(fp);if(ch==EOF)break;if(ch=='n'){ Cname[i][j]=' ';i++;j=0;6 温州大学城市学院课程设计 } else { Cname[i][j]=ch;j++;} } #if(Debug==1)for(i=0;i void CoureseWrite(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} for(i=0;i