1、将信息写入指定文本文件:将信息导出放在结构数组em中 将所有信息显示在屏幕上输入职工号显示信息 输入名字显示信息输入学历显示信息删除原有的职工信息添加新的职工信息3 主要函数介绍主函数:main()显示系统工作菜单,罗列该系统所有功能。先声明所有将会调用到的函数名。再运用选择函数switch即可根据使用者所输入的功能代号进入对应的功能程序。亮点:定义一个全局变量*p和全局变量。其中表示当前系统中职工人数,指向的地址,追踪人数变化,这样在添加或者删除导致人数变化后,浏览函数display()能够正确显示出当前人数的职工信息。宏定义define?N指定首次输入的职工人数,可根据不同需要随时更改。
2、n=1 n=2 n=3 n=4 n=5 default输入函数:void input()定义一个结构struct employee和数组em【N】用来储存N个职工的所有信息(职工号em【i】number、姓名em【i】name、性别em【i】sex、年龄em【i】age、学历em【i】xueli、工资em【i】wage、住址em【i】address、电话em【i】telephone)。通过for循环输入所有职工信息。用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。输入完毕后套用保存函数save(N)将所输入的信息写入指定文件。 =0!=0?保存函数:void?save(
3、int?m)定义文件指针,用只写打开指定在盘的“”文本文件。首先用语句判断文件是否打开成功,若返回值不为,则可继续下面操作。用循环通过语句将结构数组中的内容写入保存在盘的文本文件里面。形参m指需要写入文件的职工人数。最后关闭文件。 ! !导出函数:voidload(intb)首先判断fopen只读打开“”是否成功,若其返回值不为零,继续下面操作。用for循环通过fscanf语句将文件中的职工信息取出放到em结构数组里面。形参b指需要导出的职工人数。图 同上。4 功能模块函数设计和调试功能模块函数设计在整个程序的编译过程中,在调试的时候出现了好多的错误和警告,经过认真的分析和修改都可以解决,但是
4、其中遇到最大的问题是所有程序代码编完放在一起后,虽然能够成功运行,但是还是出现了一些小问题,就是在调用随机分配函数时职工的工号不随机分配,每次到了自动分配工号的时候都会跳过那一步就直接进行下一环节输入了。这使我百思不得其解,后来我在网上查询了好多资料后终于明白了,原来在使用随机分配函数时首先要调用随机分配函数所在的函数库,这样才能够正常使用。使用时如果职工人数发生变化,会导致文件后部出现乱码的现象。若要使每次运行都正常,必须在人数改变后退出程序,修改宏定义N的值。这样很不方便,不能够连续运行。为解决这一大问题,最后我想到了定义一个全局变量,用来追踪链接最新的人数。特别是删除和添加这两个会导致人
5、数变化的函数中,全局变量p起了很大作用。经过一边修改一边调试,最终可以成功的用p串联整个函数,在连续运行时,总能根据最新的人数调用各个函数。另外在串联所有函数时,调试提示出错:有以下几个函数:“search; srand;display;basic;types” 解决:在函数名前加void指明类型。整个程序代码是分块书写的,每个函数都可以独立运行。只有输入函数查询菜单函数写得很顺利,一次性就能够成功运行,其他函数在调试过程中或多或少都出现了问题。保存函数save()在调试和链接的时候都没有出现错误提示,但在运行的时候出现了问题。写入指定位置的文件,打开后总会有乱码。与c语言课本上的例题对照后发
6、现,在存储文件时一定要指定文件的存储类型。这样才能够正确的进行存储,不会出现乱码的现象。导出函数load()遇到两个问题。1是为方便直接将保存函数复制过来进行修改时,忘了修改文件的打开方式,不能运行。经过多次检查后终于发现了,解决:将只写改为只读就ok了。2是用fscanf语句时,漏写地址符。调试和链接都没问题,但点击运行后,总出现一个提示出错的蓝色小窗口。经过老师的提示发现了错误的所在。解决方法:在emi.name等之前加上取地址符就可以解决。在进行职工信息录入的时候一定要注意中文和英文之间的切换,不然的话会出现无法正确的输入和跳转现象。 程序调试 原始数据 int num; char na
7、me10; char sex; int age; char xueli30; int wage; char addr30;long int tel;em100; /*定义一个结构体*/void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_xueli();void search_tel();void modify(); /*定义各函数*/void menu() /*菜单函数*/ printf( C语言程序设计n
8、); printf(n 机设1401班 张凯凯n *职工信息管理*n 1.录入职工信息 2.浏览职工信息n 3.查询职工信息 4.删除职工信息n 5.添加职工信息 6.修改职工信息n 7.退出n *谢谢使用*n void main() menu(); /*调用菜单函数*/ int n,flag; char a; do printf(请选择你需要操作的步骤(1-7): scanf(%d,&n); if(n=1&n=7) flag=1; break; else flag=0;您输入有误,请重新选择! while(flag=0); while(flag=1) switch(n) case 1:pri
9、ntf( 输入职工信息ninput();break; case 2: 浏览职工信息ndisplay(); case 3: 按职工号查询职工信息nsearch(); case 4: 删除职工信息ndel(); case 5: 添加职工信息nadd(); case 6: 修改职工信息nmodify(); case 7:exit(0);default : getchar();是否继续进行(y or n):%ca); if(a=y) flag=1; system(cls /*清屏*/ menu();请再次选择你需要操作的步骤(1-6): else exit(0);void input() /*录入函数
10、*/ int i,m;请输入需要创建信息的职工人数(1-100):m); for (i=0;im;i+)职工号: srand(int)time(0); if(emi.num!=emi-1.num)%8d ,emi.num);请输入姓名:%s,emi.name);请输入性别(f-女 m-男):emi.sex);请输入年龄:emi.age);请输入学历:,emi.xueli);请输入工资:emi.wage);请输入住址:,emi.addr);请输入电话:%ldemi.tel);n创建完毕! save(m);void save(int m) /*保存文件函数*/ int i; FILE*fp; if
11、 (fp=fopen(employee_list,wb)=NULL) /*创建文件并判断是否能打开*/ printf (cannot open fileni+) /*将内存中职工的信息输出到磁盘文件中去*/ if (fwrite(&emi,sizeof(struct employee),1,fp)!=1)file write errorn fclose(fp);int load() /*导入函数*/ int i=0; if(fp=fopen(rb)=NULL) else do fread(&emi,sizeof(struct employee),1,fp); i+; while(feof(fp
12、)=0); return(i-1); 调试过程5 设计心得与总结:经过一学期的C语言学习,我们掌握了C语言的基础知识,能够读懂别人用c语言设计编译的程序。平时的程序设计大多是在书上看到的都是以书面的形式出现,虽然有所接触,但都不完全。而这周的课程设计,却让我们完完全全用自己所学到的知识编写了一个完整的系统程序。这是一个新的挑战,也是一种新的学习。我们组选择的题目是职工信息管理系统。这需要我们自己设计一个系统,可以输入信息,保存到文件里,再从文件里调出来,使之显示在屏幕上,进行删除、添加、查询等对信息的修改。初看到这个题目觉得很简单,但当我做到电脑前准备开始编写代码的时候才发现无从下手。通过去图
13、书馆查找程序设计相关的书籍,和上网参考前人编写的类似程序,我脑中才有了一个大概的方向。慢慢开始着手写下了第一段输入函数的代码,因为这是我们平时课堂上用的最多最熟的printf语句,写了很长一大段,调式运行竟然成功了,顿时信心倍增。于是我开始迫不及待的开始写第二段保存函数。我记得第一天下来,我只写好了这两个函数,但还是很开心,因为这是我编的第一个小系统的成功的开始!接下来的几天都在宿舍整个下午的对着电脑不断的编译、调试、修改,每次编好一个能够成功运行的程序,都会感到很欣慰,并增加继续下去的信心。当然其中也有遇到困难的时候。好几次遇到编好的程序调试没有错误,却偏偏不能运行这种情况,自己编的程序自己
14、很难发现当中的错误,而电脑又没有提示,这时候就很受打击,也会着急。反复检查都找不出毛病来的时候就会有想要放弃的念头。有时候就直接关机去做别的事情,等再开始做程序的时候,才发现先前的错误所在。这时候会有一种“柳暗花明又一村”的欣慰感觉。总之,遇到困难,可以先放一放,让脑子休息一下,忘掉错误的记忆。或许等过段时间再回过头来,就会很容易的发现之前的错误了。随着编好的程序越多,累积的经验也越多,查找错误就越快了。还有会发现很多程序有很多相似之处,可以通过复制修改的发式来编写。虽然题目要求只需要两种查询方式,但当我编出规律之后自然就想多写一个,写完就会有很大的成就感了。当所有功能函数都编好后,我用主函数
15、将他们串起来,这是遇到最大的问题就是经过删除、添加后职工人数会发生变化。想了很久,又翻以前的课堂笔记,最后想到了使用全局变量来解决这个问题。这个问题的成功解决预示着我们的职工信息管理系统大功告成!总之,经过这一次的课程设计,我们体会到了痛苦与快乐同存的感觉。当最后一次成功串联运行所有函数时,真的很开心。通过这次实践,我们能够更熟练掌握C语言,特别是循环和文件,当时在课堂上没有学太清楚的,这个程序设计之后都很明白了。同时增加了我们对程序设计的兴趣,暑假回家我还会尝试着做一些其他的小系统。6 参考文献1谭浩强。C程序设计(第二版)。北京:清华大学出版社,20092谭浩强。C程序设计题解与上机指导(第二版)。3XX文库
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1