程序设计基础 课程设计报告书
题目: 职工工资管理系统
指导教师: 亢临生
班 级: 软件工程1611
* ** ***
学 号: ************
课设时间: 2017.6.20
成 绩
二○一七年六月
课 程 设 计 任 务 书
| 题 目 | 职工工资管理系统 | 
| 一、设计内容及要求 一个职工的工资信息包含姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金。编写程序实现对职工工资的录入、显示、修改、查询、保存等功能。 参考数据 ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资 01 张望 1286 794 198 109 135 2034 02 李明 1185 628 135 94 114 1740 03 王小民 5 438 98 73 1294 04 张效章 1350 868 210 116 150 2162 | |
| 二、设计原始资料 无 | |
| 三、设计完成后提交的成果及其相关资料。 1.完整的源程序 2.课程设计报告书电子版一份 3.课程设计报告书纸质版一份 | |
| 四、主要参考资料 1.        2. | |
| 五、进程安排 1.2017年6月13日:下达任务,指导老师做出必要讲解 2.2017年6月13日-2017年6月22日,指导老师在机房定时辅导学生完成课程设计项目 | |
第1章 课程设计的目的与要求
1.1 课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1. 巩固和加深学生对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程序功能介绍
每一个职工的工资信息包含姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金。编写程序实现对职工工资的录入、显示、修改、查询、保存等功能。
参考数据
ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资
01 张望 1286 794 198 109 135 2034
02 李明 1185 628 135 94 114 1740
03 王小民 5 438 98 73 1294
04 张效章 1350 868 210 116 150 2162
05 彭山 745 398 84 61 68 1098
2.2程序整体设计说明
根据题目要求,应该把职工工资信息用结构体形式输入,再定义一个变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作。在程序中需实现职工工资浏览、查询、修改等功能的操作,所以要建立相应的功能模块来实现。在头文件中将所需包含的函数进行输入,再进行变量的定义,如:定义数据结构,有关职工工资管理需要输入的基本信息再用指针的方法将这些有关变量进行地址存储。再定义出工资管理整个程序中所需要的函数原型;然后进行主函数的书写,并显示所有数据。主函数无限循环,数据的录入、修改、查询等均是对内存中的链表进行操作,每次操作后将数据保存到文件。
2.2.1设计思路
首先利用while(1)对提示页面无限调用,帮助用户输入对应的正确数字编码,在输入职工信息时,运用void import()调用函数对文件的使用,首先定义一个指针文件,又以写的方式打开此文件,在打开的文件中输入要管理的职工人数,用一个for循环按照姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金的格式循环获取职工的记录,使用fwrite()将职工记录写入文件“word”中,并fclose关闭文件。在查询职工信息时,按职工号查询,首先是以只读(二进制)的方式打开文件“word”, 然后输入要查询的职工号,用一个for循环来控制查询的人数,之后在显示器上显示某一个职工信息,然后关闭文件。在修改职工信息时,按职工号修改,首先是以读写的方式打开文件“word”。输入要修改的职工号,用一个for循环来控制输入的数量。然后对职工的信息进行修改,就可获得新的职工记录。之后文件指针指向该修改的记录开头,此时用fwrite覆盖当前记录,修改完成时系统会显示修改后的文件数据:姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金然后关闭文件。在显示职工信息时,运用void browse()调用函数对文件的使用。首先以只读的方式打开一个文本文件”word”。操作无误则用for循环输出正在查询职工的:记录号 职工号 姓名 性别 年龄 工资。这些完成后用fclose(fp)函数关闭文件。
2.2.2数据结构设计及用法说明
数据结构:定义结构体people,用于存放职工的基本信息和工资信息.使用struct结构体编辑主菜单,定义全局变量,用于存放结构体数组。使用一维数组。用for语句编辑输入模块,用switch、for语句编辑查找职工数据,用if,for语句编辑修改职工信息。
用法说明:启动后屏幕上会显示下面菜单:
1 录入信息
2 修改信息
3 显示所有
4 查询信息
5 退出
执行者若要执行某一功能,就按下该功能所对应的数字即可。
输入职工信息:在主菜单中输入1则系统会进入新界面并自动提示你输入职工号,输入完成后按回车键系统会逐一提示输入姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金,输入完成后会继续提示输入下一个职工的职工号。
修改职工信息:在主菜单中输2,系统会自动提示你输入要修改的职工号,然后进行修改。修改成功显示已修改后的文件数据;输入错职工号显示查无此人。
显示职工信息:在主菜单中输入3系统界面是输出菜单界面,按照输入格式:姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金,逐个的输出职工的信息,输出所有职工信息后系统自动退出。
查询职工信息:主菜单中输入4 则进入查询子菜单界面,输入职工号后会出现该职工的信息。输入错误职工号,显示查无此人。
退出:在主菜单中输入5则退出系统。并显示 “ 退出成功 请关闭 ”。
2.2.3各模块的功能及程序说明
首先是定义了一个输入输出头文件,接着是一个宏定义,下面是函数声明部分,用结构体存储和录入该程序的所有数据,主函数部分包括设计的全部信息,之后是输出主菜单和调用函数,退出程序。此程序中包括:输入模块、查询模块、修改模块、显示模块。
输入模块:该模块先是对姓名、ID号、基本工资、职务工资、岗位津贴、医 疗保险、公积金的录入并保存到文件“word ”中。
查询模块:实现按职工号查询每个职工的信息,查询显示姓名、ID号、基本 工资、职务工资、岗位津贴、医疗保险、公积金
修改模块:该模块实现按职工号对职工所有信息的修改。
显示模块: 该模块实现按职工号输出职工的所有信息。
退出模块:保存并且关闭,用来退出while(1)的死循环
2.2.4程序结果展示
录入模块:
修改模块:
查询模块:
显示模块:
退出模块:
2.3程序源代码及注释
/*每一个职工的工资信息包含姓名、ID号、基本工资、职务工资、岗位津贴、医疗保险、公积金。编写程序实现对职工工资的录入、显示、修改、查询、保存等功能。
参考数据
ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资
0张望 198 109 135 2034
0李明 135 94 114 1740
0王小民 5 1294
0张效章 1350 210 116 150 2162
0彭山 84 61 68 1098
*/
源码:
#include #include #include  #define max 30  //定义   void menu();//菜单   void import();   void browse();//显示所有   void search_num();//查询信息   void revise();//修改信息   定义个人信息结构体       char no[5];  //编号       char name[max]; //名字       int basepay;//基本工资       int wage; //职务工资       int subsidy;//津贴       int surance;//医疗保险       int fund; //公积金       int total;  //z总和         };    struct people num[max]; //定义人员信息数组  void main(){//主函数    menu();  }    void menu() //菜单   {   int a;  int i=0;       while(1) {  printf("\\n**********************\\n") ;    printf("1.录入信息\\n") ;  printf("2.修改信息\\n") ;  printf("3.显示所有\\n") ;  printf("4.查询信息\\n") ;  printf("5.退出\\n") ;  printf("\\n**********************\\n") ;  printf ("请输入数字编码");  scanf("%d",&a);  switch (a) {    case 1:{  //录入数据       import();       break;        }     case 2:{  //修改信息         revise();        break;       }    case 3:{   //显示信息       browse();      break;       }    case 4:{   //查询信息      search_num();               break;        }    case 5:{  //退出       printf("退出成功 请关闭") ;      exit(0); }          defaul:{  //输入错误       printtf("请重新输入");      break;        }        }     }   } void import(){ //录入信息       FILE *fp;      int n,i;  //n用来存储职工数  i用来存储第几个员工       if ((fp=fopen("word        {           //         printf("不能建立word文件\这四行用来判断是否可以正确打开          e      //         }      printf("输入职工人数:");      scanf ("%d",&n);          for(i=0;i        scanf("%s",&num[i].no);   //职工号         printf("请输入第%d姓名信息",i+1);        scanf("%s",&num[i].name);  //姓名         printf("请输入第%d基本工资",i+1) ;        scanf("%d",&num[i].basepay) ; //基本工资         printf("请输入职务工资") ;        scanf("%d",&num[i].wage) ;  //职务工资         printf("请输入津贴") ;              scanf("%d",&num[i].subsidy) ; //津贴         printf("请输入医疗保险") ;        scanf("%d",&num[i].surance) ; //保险         printf("请输入公积金") ;        scanf("%d",&num[i].fund) ; //公积金         num[i].total= num[i].basepay+num[i].wage+num[i].subsidy+num[i].surance+num[i].fund;   //计算总和         fwrite(&num[i],sizeof(struct people),1,fp); //写入到文件中            }      fclose(fp);  //关闭文件  }   void revise(){ //修改信息          if((fp=fopen("word   //二进制读的方式打开   不能打开word文件\\n");  输入要修改的的职工号:");     //对比职工号  如果没有这个职工号 就退出     //如果fp文件指针到达文件尾  查无此人\\n");           //fseek(fp,i*sizeof(struct people),SEEK_SET);         printf("请输入职工新的编号");        scanf("%s",&num[i].no);        printf("请输入姓名信息");        scanf("%s",&num[i].name);        printf("请输入基本工资") ;        scanf("%d",&num[i].basepay) ;        printf("请输入职务工资") ;        scanf("%d",&num[i].wage) ;        printf("请输入津贴") ;        scanf("%d",&num[i].subsidy) ;        printf("请输入医疗保险") ;        scanf("%d",&num[i].surance) ;        printf("请输入公积金") ;        scanf("%d",&num[i].fund) ;        num[i].total= num[i].basepay+num[i].wage+num[i].subsidy+num[i].surance+num[i].fund;         fseek(fp,-(long)sizeof(struct people),SEEK_CUR);  //移动指针到所在数组的第一个地址上         fwrite(&num[i],sizeof(struct people),1,fp);   //写入数据         fclose(fp);          }    v显示信息    int i;      if((fp=fopen("word      {       不能打开word文件\\n");  职工号\ 姓名\ 基本工资\ 职务工资\ 津贴\ 医疗保险\ 公积金\ \总工资 \\n");  fp)!=0;i++)   } } void search_num(){//查询信息       if((fp=fopen("word  不能打开word文件\\n");  要查询的职工号:");      if(!strcmp(num[i].no,number)) break;  查无此人\\n");  职工号\ 姓名\ 基本工资\ 职务工资\ 津贴\ 医疗保险\ 公积金\ 总工资 \\n");  .basepay,num[i].wage,num[i].subsidy,num[i].surance,num[i].fund,num[i].total); }     第3章 课程设计总结 经过一学期的C语言学习,我们掌握了C语言的基础知识,我对课程设计有了一定的了解,并且通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的。 在编写课程设计的时候,发现我对文件这一块知识还不是很清楚,所以通过查找资料的方式,进一步了解了fopen(),fwriter()以及fseek()函数的用法,参考的书籍是人民邮电出版社的< 通过这几天的努力,职工工资管理系统的设计已基本完成。在本次课程设计中,我充分领略了C语言功能的强大,包括函数、数组、指针、结构体、文件等。而且我学会了最基本的替换,然后扩展到循环、嵌套,条理很清楚。 总的来说,通过这次程序设计,使我加深了对C语言的认识,进一步熟悉了对C语言功能的灵活运用,而且加深了我对程序的理解和编写能力,通过文献资料和网络资料的帮助,使我对C语言程序设计这一基础学科又一次加深了认识,也意识到了其具有的强大功能和发展前景。这会对以后的学习有所帮助。下载本文