C语言课程设计——教材管理系统.pdf
1 沈 阳 航 空 航 天 大 学课程设计学号 _02072_班级 _ 姓名 _ 于涛_ _ 指导教师 _ 徐晗_2010 年 10 月 08 日I 目录一、需求分析.错误!未定义书签。二、设计分析.错误!未定义书签。三、主要界面截图.错误!未定义书签。四、技术要点.错误!未定义书签。五、个人总结.错误!未定义书签。六、参考文献.错误!未定义书签。七、源程序.错误!未定义书签。1 一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是:录入新教材信息,添加已有教材,查找教材信息,保存教材函数。在这些函数当中,前三个函数的实现严格按照题目的要求,而最后一个函数用来将修改的函数保存在中。1.稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。2.主要功能分析(1)录入教材信息:允许用户输入教材名称、作者、出版社、教材册数、编号、售价。(2)查询教材:允许按照编号和书名对教材的各项信息进行查询;(3)添加已有教材:通过添加已有教材的同时对教材信息的更改;2(4)保存教材函数将执行插入教材信息存入中。除上面介绍的功能之外,程序还具有退出功能,可以在输入修改信息之后实现选择退出。每一本教材记录都包含编号、作者、出版社、售价、书名和数量,在程序当中,将教材记录类型定义为结构体类型,添加以及追加的教材信息直接写入文件中,其他函数每次对教材记录的访问,其数据来源都是文件,这样做不但可以保证教材数据的一致性,而且可以对教材数据进行保存,保证每次运行程序都可以采用原来的数据。二、设计分析主要有 5 个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:1、教材录入函数说明这个函数用 static声明局部变量,使函数调用结束后不消失而保留原值。用只写的方式打开一个文件夹()把数据项写入指定文件中。关闭文件。2、教材查询的函数该函数的核心内容是switch函数的使用、for函数3 的嵌套使用与 strcmp 比较字符串函数的使用。3、已有教材添加函数该函数的核心内容是if函数嵌套和 for 函数的使用以及 strcmp 比较字符串函数的使用4、教材信息保存函数这个函数先建立一个文件并把具体的信息存入文件中1、程序总体结构图程序结构总图设置界面函数新教材信息的录入教材信息的保存教材信息的查询教材信息的更改4 2、具体功能框图(1)录入新教材信息函数5(2)查询教材信息6(3)添加已有教材信息(4)保存教材信息函数7 三、主要界面截图图 1 程序主界面图 2 录入界面图 3 查询界面8 四、技术要点(对本程序贡献较大的C语言知识点;重要算法的设计与实现)1、结构体的应用定义了结构体用来描述教材的名称、作者、出版社、编号、册数和售价,具体的定义如下:#define B 1000 typedef struct Book char num20;char name20;char author20;char press20;int count;float shoujia;bookB;struct Book booksB;所定义的结构体主要用于定义数组。2、文件操作包括了文件的写入、读取和保存三个方面。例如如下程序段用于保存教材信息:void save()i nt i=0;FILE*fp;fp=fopen(e:,wr);while(booksi.count 0)9 fprintf(fp,教材名称:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%fn,booksi.name,booksi.author,booksi.press,booksi.count,booksi.num,booksi.shoujia);i+;f close(fp);3、关于查询函数实现从系统中查询某教材的相关信息的查询函数稍微复杂一些,需要先进行选择是通过名称查询还是编号查询。如下是通过教材名称查询的函数:void chaxun()/*教材查询*/FILE*fp;int i,flag=0;int a;char x32;char y32;if(fp=fopen(e:,r)=NULL)printf(此文件无法打开!n);return;printf(请选择查询方式:1.教材名 2.编号n);scanf(%d,&a);switch(a)case 1:printf(输入教材名:n);scanf(%s,x);for(i=0;i1000;i+)if(strcmp(booksi.name,x)=0)/*比较输入名与存储名的字符串大小*/printf(教材名:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售10 价:%fn,booksi.name,booksi.author,booksi.press,booksi.count,booksi.num,booksi.shoujia);flag=1;if(flag=0)printf(此教材不存在 n);break;五、个人总结C语言是一门既有趣又非常有用的课程,说难也不难,但是也不简单,只要会很好的应用,便会觉得编程过程也并不感觉枯燥,当程序编完且运行成功之后,便觉得非常有成就感,虽然有时也会被一时解决不了的问题弄的焦头烂额,但在解决的过程中逐渐的、更深的掌握这门课程的知识,所以,这一周的C 语言课程设计实习的收获是非常的大的,甚至还有一点觉得实习的时间有点短。通过这次c 语言课程设计,我对C语言的知识进行了比较全面的学习,了解到 C语言的简单编程的实际应用。我的程序基本功能符合题目要求,但也并不是太完美。例如在输入教材册数的时候如果输入的不是数字的话,不会有提示。我始终没有想到解决的办法通过此次课程设计,我熟悉了函数的调用,指针的应11 用,数组的运用。程序可以实现题目所要求各项,知道了实践并真正上机操作的意义。六、参考文献1 谭浩强C程序设计北京:清华大学出版社,2009七、源程序#include#include#include#define B 1000 typedef struct Book /*定义教材结构体*/char num20;char name20;char author20;char press20;int count;float shoujia;bookB;struct Book booksB;void luru()/*录入教材信息*/static int i=0;printf(n请输入教材名称:);scanf(%s,booksi.name);printf(请输入作者:);scanf(%s,booksi.author);printf(请输入出版社:);scanf(%s,booksi.press);printf(请输入教材册数:);scanf(%d,&booksi.count);12 printf(请输入编号:);scanf(%s,booksi.num);printf(请输入售价:);scanf(%f,&booksi.shoujia);printf(教材录入结束.n);i+;void tianjia()/*教材添加*/int i,count;char name10;printf(n请输入教材名称:);scanf(%s,name);for(i=0;i 0)fprintf(fp,教材名称:%s 教材作者:%s 出版社:%s 册数:%d 编号:%s 售价:%fn,booksi.name,booksi.author,booksi.press,booksi.count,booksi.num,booksi.shoujia);13 i+;fclose(fp);void chaxun()/*教材查询*/FILE*fp;int i,flag=0;int a;char x32;char y32;if(fp=fopen(e:,r)=NULL)printf(此文件无法打开!n);return;printf(请选择查询方式:1.教材名 2.编号 n);scanf(%d,&a);switch(a)case 1:printf(输入教材名:n);scanf(%s,x);for(i=0;i1000;i+)if(strcmp(booksi.name,x)=0)/*比较输入名与存储名的字符串大小*/printf(教 材 名:%s 教 材 作 者:%s 出 版 社:%s 册 数:%d 编 号:%s 售价:%fn,booksi.name,booksi.author,booksi.press,booksi.count,booksi.num,booksi.shoujia);flag=1;if(flag=0)printf(此教材不存在 n);break;case 2:printf(输入编号:n);scanf(%s,y);for(i=0;i1000;i+)if(strcmp(booksi.num,y)=0)printf(教 材 名 称:%s 教 材 作 者:%s 出 版 社:%s 册 数:%d 编 号:%s 售价:%fn,booksi.name,booksi.author,booksi.press,booksi.count,booksi.num,booksi.shoujia);flag=1;14 if(flag=0)printf(此教材不存在 n);break;default:break;fclose(fp);void show()/*显示操作界面*/printf(n *沈阳航空航天大学教材管理系统*);printf(n *1 录入教材信息 *);printf(n *2 查询教材信息 *);printf(n *3 更改教材信息 *);printf(n *4 保存教材信息 *);printf(n*5 退 出 系 统*n);printf(n 请输入您要选择的操作序号,按回车键确认:);void main()int n;show();scanf(%d,&n);while(1)switch(n)case 1:luru();break;case 2:chaxun();break;case 3:tianjia();break;case 4:save();break;case 5:exit(0);break;default:break;show();scanf(%d,&n);15 FILE*fp;fp=fopen(e:,r+);if(fp=0)printf(无法打开文件 n);fclose(fp);