1、目 录 第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1程序功能介绍22.2程序整体设计说明22.2.1设计思路22.2.2数据结构设计及用法说明32.2.3程序结构(流程图)52.2.4各模块的功能及程序说明62.2.5程序结果62.3程序源代码及注释7第3章 课程设计总结16参考资料 17第1章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1.
2、 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1.3 课程设计的预备知识熟悉C语言及C语言开发工具。1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 课程设计内容2.1程序功能介绍该系
3、统能够实现工资信息管理。系统包括录入,浏览,查询,统计等功能。其中录入功能要求能够添加新的工资信息到文件;浏览功能要求能按照工资卡号,姓名分类浏览,提供分屏显示;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号,姓名查询;统计功能要求能够按照月份累计统计某职工在某时间段实发工资总金额。2.2程序整体设计说明根据题目要求,应该把职工工资信息用结构体形式输入,再定义一个变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作。在程序中需实现职工工资浏览、查询、统计等功能的操作,所以要建立相应的功能模块来实现。在头
4、文件中将所需包含的函数进行输入,再进行变量的定义,如:定义数据结构,有关职工工资管理需要输入的基本信息再用指针的方法将这些有关变量进行地址存储。再定义出工资管理整个程序中所需要的函数原型;然后进行主函数的书写,并显示所有数据。主函数无限循环,操作之前先开辟内存,建立动态链表,文件中如果有数据则导入内存,每条记录存入一个链表节点,数据的录入、修改、插入、删除、查询等均是对内存中的链表进行操作,每次操作后将数据保存到文件。2.2.1设计思路在输入职工信息时,运用void input()调用函数展开对文件的使用,首先定义一个指针文件,又以写的方式打开此文件,在打开的文件中输入要管理的职工人数,用一个
5、for循环按照职工工号 姓名 岗位工资 奖金 扣除 实发的格式循环获取职工的记录,接着又用了一个for循环将职工记录写入文件“emp ”中,关闭文件。在查询职工信息时,开始是一个二级子菜单,一个是实现按职工号查询,另一个是选择退出返回主菜单,此处是利用switch选择语句。选择按职工号查询,首先是以只读的方式打开文件“emp”, 然后输入要查询的职工号,用一个for循环来控制查询的人数,之后在显示器上显示职工信息,然后关闭文件。在修改职工信息时,开始是一个二级子菜单,一个是按职工号修改,另一个是选择退出返回主菜单,此处是利用switch选择语句。选择按职工号修改,首先是以读写的方式打开文件“e
6、mp”。输入要修改的职工号,用一个for循环来控制输入的数量。然后对职工的信息进行修改,就可获得新的职工记录。之后文件指针指向该修改的记录开头,此时用newemp覆盖当前记录,修改完成时系统会显示修改后的文件数据:记录号、 职工号、 姓名 、性别 、年龄 、工资,然后关闭文件。在删除职工信息时,开始是一个二级子菜单,一个是按职工号删除记录,另一个是选择退出返回主菜单,此处是利用switch选择语句。选择按职工号删除记录,首先是只读的方式打开一个二进制文件“emp”。循环依次改后职工信息写入文件,显示删除后文件中的职工信息。最后可以关闭文件。在统计职工信息时,运用void stat ()调用函数
7、展开对文件的使用。首先是以只读的方式打开文件“emp”。输入职工的工资数,运用for循环根据输入的工资,显示大于该工资的职工的所有信息。关闭文件,统计完成。在输出职工信息时,运用void output()调用函数展开对文件的使用。首先以只读的方式打开一个文本文件”emp”。操作无误则用for循环输出正在查询职工的:记录号 职工号 姓名 性别 年龄 工资。这些完成后用fclose(fp)函数关闭文件。在追加职工信息时,首先以读写的方式为读写打开一个二进制的文件“emp”,输出“要追加的职工人数”待输入要追加的个数后,用for循环控制待输入的职工信息。用fwrite(&newemp,sizeof(
8、struct emploee),1,fp)将该职工记录写入文件。用fclose(fp)函数关闭文件。2.2.2数据结构设计及用法说明 数据结构:定义结构体emolyee,用于存放职工的基本信息和工资信息.使用struct结构体编辑主菜单,定义全局变量,用于存放结构体数组。使用一维数组。用for语句编辑输入模块,用switch、for语句编辑查找职工数据,用if,for语句编辑修改职工信息,和删除职工信息。用法说明:启动后屏幕上会提示要求输入职工号,如果输入错误就会显示查无此人;输入错误字符显示“WRONG”。输入后屏幕上提示登陆成功以及显示下面菜单:1 输入职工记录2 查询职工记录3 修改职工
9、记录4 删除职工记录5 输出职工记录6 统计工资情况7 追加职工记录8 结束使用0 退出系统执行者若要执行某一功能,就按下该功能所对应的数字即可。输入职工信息:在主菜单中输入1则系统会进入新界面并自动提示你输入职工号,输入完成后按回车键系统会逐一提示输入 姓名 性别 年龄 工资,输入完成后会继续提示输入下一个职工的职工号。查询职工信息:主菜单中输入2 则进入查询子菜单界面,屏幕上会按先后顺序显示输入的记录,并统计输入的个数。此时在界面里出现数字1和0。系统会提示你选择(0-1)。输入1后则进入按职工号查询职工信息,此时系统会自动提示你输入要查询的职工号。输入职工号后会出现该职工的信息。输入错误
10、职工号,显示查无此人;输入错误字符显示“WRONG”。 输入0则返回主菜单。修改职工信息:在主菜单中输入3则系统进入修改子菜单界面。此时在界面里出现数字1和0。系统会提示你选择(0-1)。输入1是按职工号修改职工信息,系统会自动提示你输入要修改的职工号,然后进行修改。修改成功显示已修改后的文件数据;输入错职工号显示查无此人;输入错误字符显示 “WRONG”。 输入0是返回主菜单。删除职工信息:在主菜单中输入4系统界面是删除子菜单。系统会提示你选择(0-1)。输入1则按职工号删除记录,系统会自动提示你输入要删除的职工信息,进入新界面后系统会提示你删除前该职工的信息包括记录号 、职工号、姓名、 性
11、别 、年龄 、工资等。输入错误职工号,显示没有该职工号的职工。输入错误字符显示 “WRONG”。一个记录已经删除了时,系统会提示删除后的职工信息。输入0则返回主菜单。输入格式:职工号、 姓名 、性别 、年龄、 工资输入职工的信息,这样就获取一个职工的记录,并将该职工记录自动写入文件,如果想退出此系统可以按“0” ,就可以退出此系统了输出职工信息:在主菜单中输入5系统界面是输出菜单界面,按照输入格式:职工号、 姓名 、性别 、年龄、 工资,逐个的输出职工的信息,输出所有职工信息后系统自动退出。统计职工信息:在主菜单中输入6系统界面是统计菜单界面,输入工资数,显示大于该工资的职工的所有信息。关闭文
12、件。退出系统:在使用各个功能后输入0则返回主菜单。在主菜单中输入0则退出系统。并显示 “ 谢 谢 使 用 ! ”。2.2.3程序结构(流程图)选择8?结束使用选择0?退出系统结束打印职工记录删除职工记录调查工资情况选择6?选择5?选择4?按姓名按工号追加职工记录选择7?按姓名按工号选择3?选择2?选择1?修改职工记录输入职工记录查询职工记录按姓名按工号主菜单开始选择操作 图1程序流程图2.2.4各模块的功能及程序说明首先是定义了一个输入输出头文件,接着是一个宏定义,下面是函数声明部分,用结构体存储和录入该程序的所有数据,并把信息写到文件emp.dat中,保存在磁盘中方便以后使用,主函数部分包括
13、设计的全部信息,之后是输出主菜单和调用函数,退出程序。此程序中包括:输入模块、查询模块、修改模块、删除模块、统计模块、输出模块、追加模块。输入模块:该模块先是对职工号 姓名 岗位工资 奖金 扣除 实发的录入并保存到文件“emp ”中。查询模块:实现按职工号查询每个职工的信息,查询显示 职工号 姓名 岗位工资 奖金 扣除 实发。 修改模块:该模块实现按职工号对职工所有信息的修改。删除模块:该模块实现按职工号对职工所有信息的删除。统计模块:根据输入的工资,显示大于该工资的职工的所有信息。输出模块: 该模块实现按职工号输出职工的所有信息。追加模块:该模块实现添加新的职工的信息。2.2.5程序结果输入
14、一条记录信息:如图;查找职工记录:如图删除职工信息如图:修改职工记录如图:2.3程序源代码及注释/*源程序:职工工资管理系统*/#include /*头文件*/#define NUM 100void input();void search();void search_num();void dele();void dele_name();void dele_num();void modi();void modi_num();void output();void stat();void fun();void run();char no5; /*定义职工工号数组*/char name8; /*定义职
15、工姓名数组*/char sex3; /*定义职工性别数组*/int age; /*定义职工年龄数组*/int salar; /*定义职工工资数组*/empNUM,newemp;main() /*主函数*/int x;printf( 1. 输入职工记录n);printf( 2. 查看职工记录n);printf( 3. 查找职工记录n);printf( 4. 删除职工记录n);printf( 5. 统计职工记录n);printf( 6. 修改工资情况n);printf( 7. 保存职工记录n);printf( 8. 显示作者信息n);printf( 0. 退出系统n);printf(n);prin
16、tf(*职工工资管理系统 *n);printf(请选择(0-8):n);scanf(%d,&x);switch(x)case 1: input();break; /*输入职工信息*/case 2: search();break; /*查询职工信息*/case 3: modi();break; /*修改职工信息*/case 4: dele();break; /*删除职工信息*/case 5: output();break; /*打印职工信息*/case 6: stat();break; /*调查职工工资情况*/case 7: run();break; /*添加新的职工信息*/case 8: fu
17、n();break; /*结束使用*/default:printf(n Wrong!);if(x=0)break;void input() /*输入职工信息*/FILE *fp; /*定义文件指针变量*/int n,i;if (fp=fopen(emp,wb)=NULL)printf(不能建立emp文件n);exit(1);printf(输入职工人数:);scanf(%d,&n);printf(输入格式:职工号 姓名 性别 年龄 工资n);for(i=0;in;i+) /* 循环获取n个职工记录 */printf(第%d个职工:,i+1);scanf(%s%s%s%d%d,empi.no,em
18、pi.name,empi.sex,&empi.age,&empi.salar); /*输入职工基本信息*/for(i=0;i=num)printf(%6d%6s%9s%4s%5d%6dn,n+1,empn.no,empn.name,empn.sex, empn.age,empn.salar); /*输入工资后显示职工基本信息*/fclose(fp);/*删除模块*/void dele() /*对职工记录进行删除*/int x;while(1)printf(nntt删除子菜单n);printf(tt*n);printf(tt 1.按职工号删除记录n);printf(tt 0.返回主菜单n);pr
19、intf(tt*n);printf(t 请选择(0-1):);scanf(%d,&x);switch(x)case 1:dele_num();break; /*选择删除信息*/default:printf(nWrong!);if(x=0)break; /*条件判断*/void dele_num()FILE *fp; /*定义文件指针变量*/int i,j,n;char num5;if(fp=fopen(emp,rb)=NULL)printf(不能打开emp文件n);exit(1);printf(删除前:n);printf(记录号 职工号 姓名 性别 年龄 工资n);for(n=0;fread(
20、&empn,sizeof(struct emploee),1,fp);n)/*将内存中的职工信息循环输出到磁盘文件中*/printf(%6s%6s%9s%4s%5d%6dn,n+1,empn.no,empn.name,empn.sex,empn.age,empn.salar); /*n为emp文件中记录数*/printf(要删除的职工号:);scanf(%s,num);for(i=0;(strcmp(empi.no,num)!=0&i=n)printf(t没有%s职工号的职工n,num);exit(2);fclose(fp);fp=fopen(emp,w+);if(n=1) /*一个记录已经删
21、除了*/fclose(fp);exit(3);for(j=0;ji;j+)fwrite(&empj,sizeof(struct emploee),1,fp);for(j=i+1;jn;j+)fwrite(&empj,sizeof(struct emploee),1,fp);printf(删除后:n);fseek(fp,0,SEEK_SET);printf(记录号 职工号 姓名 性别 年龄 工资n);for(i=0;fread(&empi,sizeof(struct emploee),1,fp);i+)printf(%6s%6s%9s%4s%5d%6dn,i+1,empi.no,empi.nam
22、e,empi.sex,empi.age,empi.salar);fclose(fp);/*修改模块*/void modi()int x;while(1) printf(nntt修改子菜单n);printf(tt*n);printf(tt1. 按职工号修改n);printf(tt0. 返回主菜单n);printf(tt*n);printf(t请选择(0-1):);scanf(%d,&x);switch(x) case 1:modi_num();break;default:printf(n输错误!);if(x=0)break; /*条件判断*/void modi_num()FILE *fp; /*
23、定义文件指针变量*/ int i,j;char num5;if(fp=fopen(emp,rb+)=NULL)printf(不能 打开emp文件n);exit(1);printf(要修改的职工号:);scanf(%s,num);for(i=0;fread(&empi,sizeof(struct emploee),1,fp);i+)if(!strcmp(empi.no,num)break;if(feof(fp)printf(t没有%s职工号的职工n,num);exit(2); printf(记录号 职工号 姓名 性别 年龄 工资n);printf(%6d%6s%9s%4s%5d%6dn,i+1,
24、empi.no,empi.name,empi.sex, empi.age,empi.salar);printf(输入格式:职工号 姓名 性别 年龄 工资n);printf(第%d个记录:,i+1);scanf(%s%s%s%d%d,newemp.no,newemp.name,newemp.sex,&newemp.age,&newemp.salar); /*获取新的职工记录*/fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR);/*文件指针指向该修改的记录开头*/fwrite(&newemp,sizeof(struct emploee),1,fp);
25、 /*用newemp覆盖当前记录*/printf( 修改后:n);fseek(fp,0,SEEK_SET); /*显示修改后的文件数据*/printf(记录号 职工号 姓名 性别 年龄 工资n);for(i=0;fread(&empi,sizeof(struct emploee),1,fp)!=0;i+)printf(%6d%6s%9s%4s%5d%6dn,i+1,empi.no,empi.name,empi.sex, empi.age,empi.salar);fclose(fp);/*查询模块*/void search( )int x;while(1)printf(nntt查子菜单n);pr
26、intf(tt*n);printf(tt 1.按职工号查询n);printf(tt 0.返回主菜单n);printf(tt*n);printf(t请选择(0-1):);scanf(%d,&x);switch(x)case 1:search_num();break; /*进入查询状态*/default :printf(n Wrong!);if(x=0) break; /*若退出程序则退出当前循环*/void search_num()FILE *fp; /*定义文件指针变量*/int i;char num;if(fp=fopen(emp,rb)=NULL)printf(不能打开emp文件n);ex
27、it(1);printf(要查询的职工号:);scanf(%s,num);for(i=0;fread(&empi,sizeof(struct emploee),1,fp);i+)if(!strcmp(empi.no,num) break;if(feof(fp)printf(t查无此人n);exit(2);printf(记录号 职工号 姓名 性别 年龄 工资n);printf(%6d%6s%9s%4s%5d%6dn,i+1,empi.no,empi.name,empi.sex empi.age,empi.salar); /*查找职工信息*/fclose(fp);/*输出模块*/void outp
28、ut()int i;FILE *fp; /*定义文件指针变量*/if(fp=fopen(emp,r)=NULL)printf(不能打开emp文件n);exit(0);printf(记录号 职工号 姓名 性别 年龄 工资n);for(i=0;fread(&empi,sizeof(struct emploee),1,fp)!=0;i+)printf(%6d%6s%9s%4s%5d%6dn,i+1,empi.no,empi.name,empi.sex,empi.age,empi.salar); /*输出职工信息*/fclose(fp);/*追加模块*/void run()FILE *fp; /*定义
29、文件指针变量*/int n,i,j;if(fp=fopen(emp,ab+)=NULL)printf(不能打开emp文件n);exit(0);printf(要追加的职工人数:);scanf(%d,&n);for(i=0;in;i+) /*输入新增职工信息*/ printf(输入格式:职工号 姓名 性别 年龄 工资n);printf(职工记录:);scanf(%s%s%s%d%d,newemp.no,newemp.name,newemp.sex,&newemp.age, &newemp.salar); /*获取一个职工记录*/fwrite(&newemp,sizeof(struct emploe
30、e),1,fp); /*将该职工记录写入文件*/fclose(fp);/*显示模块*/void fun()printf(tt*n);printf(tt* *n);printf(tt* *n);printf(tt* 谢 谢 使 用 ! *n);printf(tt* *n);printf(tt* *n);(tt*n);第3章 课程设计总结经过一学期的C语言学习,我们掌握了C语言的基础知识,我对课程设计有了一定的了解,并且通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,何况我所掌握的C语言知识还只是毛皮,对C语言的深层知识还没有掌握,所以我发现只有把所学的理论知识与实
31、践结合起来,从理论中得出结论,才能真正为今后的学习、工作服务,从而提高自己的实际动手能力和独立思考的能力。当我坐到电脑前准备开始编写代码的时候才发现无从下手。通过去图书馆查找程序设计相关书籍,和上网参考前人编写的类似程序,我脑中才有了一个大概方向。然后我对着电脑不断地编译、调试、修改,每次编好一个能够成功运行的程序,我都会感到很欣慰,但自己编的程序自己很难发现当中的错误,而电脑又没有提示的时候就很受打击,也会着急。但可以先放一放,让脑子休息一下,忘掉错误的记忆,或许等过段时间再回过头来。就会很容易发现之前的错误了。随着编好的程序越多,积累的经验也越多,查找错误就越快了。还有会发现很多程序有很多
32、相似之处,可以通过复制修改的方式来编写通过这几天的努力,职工工资管理系统的设计已基本完成。在本次课程设计中,我充分领略了C语言功能的强大,包括函数、数组、指针、结构体、文件等。而且我学会了最基本的替换,然后扩展到循环、嵌套,条理很清楚。职工工资管理系统是一个很实用并且使用广泛的操作系统。此系统可以减少很多工作量,做到设计合理,便于使用,易于操作,界面友好,容错性高,能够在很短的时间内,查找出所需的职工工资资料,提高工作效率。该系统具有显示、查询、修改、删除、追加等基本功能,以方便对工资的各项管理操作。每一条记录包括一个职工的工号、姓名、工资等信息,系统的各个功能模块都用函数的形式来实现,可以将
33、职工信息保存在文件中,并从文件中读取出来。总的来说,通过这次程序设计,使我加深了对C语言的认识,进一步熟悉了对C语言功能的灵活运用,而且加深了我对程序的理解和编写能力,通过文献资料和网络资料的帮助,使我对C语言程序设计这一基础学科又一次加深了认识,也意识到了其具有的强大功能和发展前景。这会对以后的学习有所帮助。参考资料1 谭浩强.程序设计题解与上机指导.北京:清华大学出版社,20052 杨涛.C语言程序设计.北京:机械工程出版社,20043 科饮.C语言程序设计.北京:电子工程出版社,20104 黄明,梁旭.C语言课程设计.北京:电子工业出版社,20065 高福成.C语言程序设计.南京:南开大学出版社,2001 6 向艳,周天彤.C语言程序设计.北京:清华大学出版社,20087 陈清华.C语言课程设计案例与编程指导.南京:东南大学出版社,20038 苏小红,孙志刚.C语言大学实用教程.北京:电子工业出版社,20109 何炎祥.程序设计基础.北京:清华大学出版社,201010 王正仲.21天学会C语言.北京:电子工业出版社,201012 李春葆.C语言设计考研指导.北京:清华大学出版社,200813 贾宗璞,许合利.C语言程序设计.江苏:中国矿业大学出版社,200715 徐波.C和C+实物精选.北京:邮电出版社,2009 17