04信息查询 输入a,判断a是否为0~2? a=0,退出回到主菜单 a=1,则调用search-by-name按书名 查询 a=2,则调用search-by-writer按 作者名查询 输入书名,若有此书则输出此书信息,若没有,则输出file open error!! 输入作者名,若有此书则输出此书 信息若没有,则输出file open error
按图书名查询
按作者名查询
6.输入模块 ——本函数由 闫 鹏 设计
1) 函数的功能:利用for循环语句和scanf、gets、getchar函数完成对结构数组的输入,存放图书信息(图书编
号、图书名、作者名、出版社、类别、出版时间、价格)。
2) 函数的入口:从主函数main()中的system(\清屏命令*/menu(); /*菜单函数提示用户怎样选择*/进
入函数,这是直接被主函数main()调用的。
3) 函数调用关系:被主函数调用。并在文中无返回值的空值void函数。 4) 函数的出口::执行完所有的printf()函数后自动退出该函数。
程序框架图:
录入数据 请输入图书编请输入图书名
图书信息输入
四、调试与测试
调试方法:打开Microsoft Visual C++ 6.0,先将各个功能函数的的内容清空,只保留主
请输入作者名 请输入出版社
请输入类别 请输入出版时请输入价格 函数main(),然后编译检验main()函数中是否有错,如果没有错误,再连接、运行。确认main()函数一切无误后,然后加入功能函数menu()函数与f1()函数,由于menu()函数比较简单,所以与f1()函数一起进行调试,f1()函数中主要注意读取文件,与写入文件,这都是二进制的形式。若menu()函数与f1()函数编译、连接、运行没问题,继续加入f2()函数,就这样的方法依次检查调试f3()函数、f4()函数。当所有的功能函数都加上且正确无误时,就可以进入下一个环节—程序的测试。
测试方法: 运行程序,然后进入销售管理系统的界面,在这里需要做的就是把自己当成一个公司的程序使用者,来对该程序进行使用,看该程序有哪些方面用着不够爽,把这些问题依次整理出来,再对源程序进行修改,在这个过程中也需要对程序进行调试,不过不必将各个功能函数的的内容清空再进行如上述的调试方法,而是,改一部份运行一次,看是否有无。
如f1()函数有误,则先修改f1()函数,一块一块的进行修改,就是遵循C语言的模块化设计原理,若所有的都改过来了,且运行无误,那就大功告成了。
在调试中遇到的问题:在调试过程中,我们遇到诸多小问题,但都在我们共同讨论后解决了。 1、问题:标点符号在输入的时候,使用的是中文输入法,这种错误一般都难以发现,让修改的时候找不到目标。
解决方法:用“替换”。如果程序中的error很多,不管error是什么,先将标点替换成英文的标点。
2、问题:调试时,有的时候编译后没什么问题,就是在点击连接link时出现了错误。而且,这种错误让我们不知道怎么修改。但是我们的程序的确正确。
解决方法:将源程序保存(save),然后关掉Microsoft Visual C++ 6.0,重新启动Microsoft Visual C++ 6.0, 五、分析及结论
A、在设计中我们实现了设计目标的所有内容
即:1、系统以菜单方式工作
2、图书信息录入功能--输入 3、图书信息浏览功能--输出
4、图书信息查询功能--算法(查询方式:1按书名查询.2.按作者名查询)
5、图书信息的删除与修改 B、其中遇到了以下问题:
不能清晰的建立设计模块,不会修改出现的错误等等。
解决方案:向同学寻求帮助,向他们学习,最终通过自己努力建立了模块。不可避免地程序中肯定依然存在者某些问题在应用中不断提高自己的能力,攻克遇到的困难。 C、该程序的不足:函数较复杂,界面不美观。
D、实践心得
经过一个多星期的编译原理课程设计,在我们一组的共同的努力下,顺利完成该课程设计。
通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对C程序原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的, 对该理论在实践中的应用有深刻的理解 。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我们对C++这门语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。在编写本程序时,在网上寻找的参考程序起到了很大的启发与参考作用。
六、参考文献
1、《C语言程序设计.谭浩强版》 2、《C语言上机指导》 3、《Microsoft Visual C++ 6.0指南》
4、附:在编写本程序时,在网上寻找的参考程序起到了很大的启发与参考作用。
七、附录 源程序清单
源程序清单
#include
struct book{//声明BOOK类的所有变量
int num; char bname[50]; char wname[20]; char press[50]; char sort[50]; int time; float price;
struct book *next; };
struct book *creatbook();//创建链表
struct book *addbook(struct book *head);//添加图书
int yanzheng(struct book *head,int m);//验证新添加的图书编码是否已存在 void deletebook(struct book *head);//删除图书 void fprint(struct book *head);//将链表写入文件 struct book *load();//从文件中读取信息并建成链表 void print_book(struct book *head);//将链表信息输出 void chaxun(struct book *head);//查询图书信息
void wname_chaxun(struct book *head);//按作者名查询图书 void bname_chaxun(struct book *head);//按图书名查询图书 void xiugai(struct book *head);//修改图书信息
int main() ——本代码由 小 组 设计 {
int choice,n,x,y=1,c,c1=317;//choice 选择进入哪项功能:对图书的增删改查 char a,d,b[10],b1[10]=\
struct book *head=NULL;//声明一个新的book类
while(y)//实现 登录 退出系统 这两个选项 在输入口令错误时产生的循环 {
system(\清屏
printf(\
printf(\欢迎进入 |\\n\ printf(\兰州交通大学图书管理系统 |\\n\
printf(\
printf(\请输入选项(0--1) ||\\n\
printf(\
printf(\用户登录 |\\n\ printf(\退出系统 |\\n\ printf(\ printf(\请输入您的选择:\ scanf(\读取选项 0/1 printf(\
getchar();//从stdio流中读字符 switch(n){//进入选择 case 0:
y=0; break;
case 1:
printf(\请输入您的用户名:\
gets(b);//获取输入的字符 将字符赋值为b
printf(\
printf(\请输入您的密码:\ scanf(\ printf(\
if(strcmp(b,b1)!=0||c!=c1){//strcmp比较功能 b1 c1 之前赋值为317 317 只
要刚输入的b 与 c 存在不等于317
printf(\验证失败,请重新输入!\\n\
scanf(\
getchar(); system(\
}
else{
printf(\验证通过!请按Enter键进入!\\n\ scanf(\ getchar(); x=1;
while(x){
system(\——本代码由 朱 斌 设 printf(\
计