《高级语言程序设计》课程设计设计题目:工资管理系统设计目录1设计任务 (1)2正文需求分析 (1)系统模块图 (1)模块说明 (1)用户使用说明 (2)测试结果 (3)3设计小结 (4)4参考文献 (5)5附录(源程序) (6)设计任务做一个工资管理系统,要能按照姓名和卡号查找员工的工资信息,以及员工工资信息的插入,删除。
同时这些信息要存储在TXT文件中…还要可以按照一定顺序输出所有员工工资的信息分析工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。
系统模块图2、总体设计:整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。
3、详细设计工资信息采用结构体数组:struct mygz /*m每月工资*/{int yuefen;float yfgz;float sf;float df;float sj;float sfgz;};struct worker /*工人信息*/{int kahao;char xingming[20];struct mygz m[12];float zsfgz;};模块说明(1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
(2)输入模块按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息。
(3)添加模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式。
(4)浏览模块通过菜单选择按照工资卡号还是姓名浏览。
如果按照卡号浏览,则显示的记录按照卡号升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。
(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。
排序方法可以选择冒泡排序、插入排序、选择排序等。
(6)查询模块实现按照工资卡号和姓名的查询,采用基本的查找方法即可。
用户使用说明启动后屏幕上显示下面菜单1查询个人工资情况2录入工资信息3删除个人工资情况4浏览员工工资信息5个人工资排序情况6退出系统如果你要执行某一功能,就按下该功能所对应的数字即可。
查询个人工资情况:在主菜单中输入1 则进入查询子菜单界面,。
系统会提示你选择菜单。
输入1后则进入按姓名查询职工信息,此时系统会自动提示你输入要查询的职工姓名。
输入职工号后会出现该职工的信息。
输入错误职工号,要求重新输入;输入2后则进入按卡号查询职工信息,此时系统会自动提示你输入要查询的职工卡号。
输入0则返回主菜单录入工资信息:在主菜单中输入2则系统会进入新界面并自动提示你输入建立的月份,输入完成后按回车键系统会逐一提示输入卡号,如没有记录,根据提示按1 新建,系统会逐一提示出入姓名,工资,水费,电费,输入完成后会继续提示输入下一个职工的职工号。
删除个人工资情况:在主菜单中输入3系统界面是删除菜单。
系统会提示你选择(0-1)。
输入1则按职工号删除记录,系统会自动提示你输入要删除的职工信息,进入新界面后系统会提示你删除前该职工的卡号。
输入错误职工号,显示没有该职工号的职工一个记录已经删除了时系统会提示删除后的职工信息。
根据菜单提示,输入1继续删除,输入2则返回主菜单。
浏览员工工资信息:在主菜单中输入4系统界面是输出菜单界面,按照输入格式:职工号、姓名、性别、年龄、工资,逐个的输出职工的信息,输出所有职工信息后系统自动退出。
个人工资排序情况:在主菜单中输入5系统界面是统计菜单界面,输入工资数,显示大于该工资的职工的所有信息。
关闭文件。
退出系统:在使用各个功能后输入6则返回主菜单。
在主菜单中输入6则退出系统。
测试结果浏览界面排序界面设计小结通过这段时间的实习, 我收获颇多。
这次实习是真正意义上的将所学知识运用到实际中去。
我进一步理解和运用了结构化程序的思想和方法,初步掌握了开发一个小型实用系统的基本方法,学会了调试一个较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高了利用C语言进行程序设计的能力.具备了一定的编程能力.接到C语言课程设计的作业我十分高兴,终于学到的东西可以运用了。
在老师的指导和大家的共同努力下,我们终于完成了程序的大体编制。
程序中包括主函数、输入模块、查询模块、修改模块、删除模块、统计模块、输出模块、追加模块。
其中在输入模块中指针文件运用的比较好,因为指针是C的一个特色,它能有效的表示复杂的数据结构,动态的分配内存,方便的使用字符串、数组,可谓是C的精华。
在程序设计中我们最大的收获就是:我们真正从实践的角度体会到了C语言在实际生活中的作用,也深刻体会到了它带来的方便快捷。
不但使我们对C语言有更进一步的巩固和认识还使我们懂得了团队协作的重要!让我们将一年所学的C语言知识学为所用,让我们感觉到了它的神奇魅力。
美中不足的就是:由于我们知识的不足以及条件的限制,本系统还有许多漏洞与不足,希望老师给以批评与帮助,我们会积极改正。
而且本程序还处于初级阶段的职工工资管理功能中,只实现了对职工工资的录入、删除、修改、查询、统计、显示等简单功能,功能较简单,不一定在实际中有大的用途,程序编排中可能有烦琐之处有待进一步简化。
参考文献姜灵芝著.C语言课程设计案例精编.清华大学出版社,2008《C语言程序设计教程》第3版谭浩强百度文库百度贴吧:C语言吧附录(源程序)#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100struct mygz /*m 每月工资*/ {int yuefen; float yfgz; float sf; float df; float sj; float sfgz; };struct worker /*工人信息*/ {int kahao; char xingming[20]; struct mygz m[12]; float zsfgz; }; int sm;struct worker a[N]; float shuijin(float m)//___________个人所得税____________________________________*/ {float shui1,shui2; float tmp; shui1=0;shui2=0; if(m>=4500){shui1=(m-4500)*0.1;shui2=50;}else{if(m>=3500 && m<4500){shui2=(m-3500)*0.05;}}tmp=shui1+shui2;return(tmp);}float shifazsfgz(float a,float b,float c,float d){float e=a-b-c-d;return(e);}/*______________读取模块_______________________________*/ void duqu(){FILE *fp;if((fp=fopen("D:工资信息.txt","r"))==NULL){printf("无法读取文件");;return;}while(!feof(fp)){fread(&a[sm],sizeof(struct worker),1,fp);sm++;}}/*_______________排序模块_________________________________*/typedef struct worker stu;sortbykahao(const void *,const void *); sortbyxingming(const void *,const void *);void paixu(){int i;int choice;int (*p)(const void * ,const void *);printf("choice_1: 按卡号排序\n");printf("choice_2: 按姓名排序\n");printf("choice_3: 按工资排序\n");printf("choice_4: 返回主菜单\n");scanf("%d",&choice);while(choice!=0){if(choice==1)p=sortbykahao;if(choice==2)p=sortbyxingming;if(choice==3){int j;float temp;for(j=0;j<sm-2;j++){for(i=0;i<=sm-j-i;i++)if(a[i].zsfgz>a[i+1].zsfgz){temp=a[i].zsfgz;a[i].zsfgz=a[i+1].zsfgz;a[i+1].zsfgz=temp;} }for(i=0;i<=sm-1;i++)printf("%10f %-10d %-20s \n",a[i].zsfgz,a[i].kahao,a[i].xingming); }if(choice==4)return;qsort(a,sm,sizeof(stu),p);if(choice==1)for(i=0;i<sm;i++)printf("\n%d\t%s\t%d",a[i].kahao,a[i].xingming,a[i].zsfgz);if(choice==2)for(i=0;i<sm;i++)printf("\n%s\t%d\t%d",a[i].xingming,a[i].kahao,a[i].zsfgz);printf("\n");scanf("%d",&choice);}}sortbykahao(const void *p,const void *q){stu *x,*y;x=(stu*)p;y=(stu*)q;return ((*x).kahao-(*y).kahao);}sortbyxingming(const void *p,const void *q){stu *x,*y;x=(stu*)p;y=(stu*)q;return strcmp((*x).xingming,(*y).xingming);}/*_______________查询模块__________________________________*/void chaxun()int b,i,j;system("cls");label_3:b=0;while(b!=1&&b!=2){printf("1,选择姓名查询.\n2,scanf("%d",&b);}if(b==1){char c[20];printf("请输入您的姓名:\n");scanf("%s",c);i=0;while(!(strcmp(a[i].xingming,c)==0)&&i<sm){ i++; }if(i==sm){ printf("您查找的名字不存在,请正确输入您的名字或用卡号查询\n");return;}printf("%-10d %-20s \n",a[i].kahao,a[i].xingming);for(j=0;a[i].m[j].yuefen!=NULL;j++){printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);}printf("总实发工资:%10f\n",a[i].zsfgz);b=0;while(b!=1&&b!=2){printf("1,继续查询.\n2,返回主菜单.\n");scanf("%d",&b);}if(b==1){ goto label_3; }else{ ;return; }}else{int d=0;while(!(d>=10001&&d<=32767)){ printf("请输入您的卡号(五位数字),例如:10001\n");scanf("%d",&d); }i=0;while(a[i].kahao!=d&&i<sm){ i++; }if(i==sm){ printf("您查找的名字不存在,请正确输入您的名字或用卡号查询\n");return; }printf("%-10d %-20s \n",d,a[i].xingming);for(j=0;a[i].m[j].yuefen!=NULL;j++){printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);}printf("总实发工资:%10f\n",a[i].zsfgz);b=0;while(b!=1&&b!=2){printf("1,继续查询.\n2,返回主菜单.\n");scanf("%d",&b);}if(b==1){ goto label_3; }else{ ;return; }}}/*______________浏览模块___________________________________*/void liulan(){struct worker x;int c;float d;int i,j,k;system("cls");for(i=0;i<sm;i++){c=a[i].kahao;k=i;for(j=i+1;j<sm;j++){if(c>a[j].kahao){ c=a[j].kahao;k=j; }}x=a[i];a[i]=a[k];a[k]=x;}for(i=0;i<sm;i++){printf("%-10d %-20s \n",a[i].kahao,a[i].xingming);for(j=0;a[i].m[j].yuefen!=NULL;j++){printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);}printf("总实发工资:%10f\n",a[i].zsfgz);}for(i=0;i<40;i++){ printf("\n"); }for(i=0;i<sm;i++){d=a[i].zsfgz;k=i;for(j=i+1;j<sm;j++){if(d<a[j].zsfgz){ d=a[j].zsfgz;k=j; }}x=a[i];a[i]=a[k];a[k]=x;}for(i=0;i<sm;i++){printf("%-20s %-10d \n",a[i].xingming,a[i].kahao);for(j=0;a[i].m[j].yuefen!=NULL;j++){printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);}printf("总实发工资:%10f\n",a[i].zsfgz);}}/*__________________删除模块_______________________________*/void shanchu(){FILE *fp;int b,c,i,j;system("cls");label_4:printf("请输入要删除信息的卡号:\n");scanf("%d",&b);for(i=0;i<sm;i++){if(a[i].kahao==b){ j=i; }}for(i=j+1;i<sm;i++){ a[i-1]=a[i]; }sm--;fp=fopen("D:工资信息.txt","w");for(i=0;i<sm;i++){ fwrite(&a[i],sizeof(struct worker),1,fp); }fclose(fp);c=0;while(c!=1&&c!=2){ printf("1.继续删除\n2 返回主菜单\n");scanf("%d",&c); }if(c==1){ goto label_4; }else{return; }}/*__________________录入模块_______________________________*/ void luru(){FILE *fp;int k,i,j,b,c,d;system("cls");if((fp=fopen("D:工资信息.txt","w"))==NULL){ printf("无法找到目标文件\n");return; }label_1:b=0;while(!(b>=1&&b<=12)){ printf("请您输入您要建立的月份\n");scanf("%d",&b); }b=b-1;d=0;while(!(d>=10001&&d<=32767)){printf("请输入您要录入工资的卡号(五位数字),例如:10001\n");scanf("%d",&d); }for(i=0;i<sm&&a[i].kahao!=d;i++);if(a[i].kahao!=d){c=0;while(c!=1&&c!=2){ printf("没有该卡号记录.\n1 新建\n2 返回上一级\n");scanf("%d",&c); }if(c==2){ goto label_1; }if(c==1){a[i].kahao=d;printf("请输入姓名:\n");scanf("%s",a[i].xingming);printf("请输入此人该月的应发工资,水费,电费(空格分开):\n");scanf("%f%f%f",&a[i].m[b].yfgz,&a[i].m[b].sf,&a[i].m[b].df);a[i].m[b].yuefen=b+1;a[i].m[b].sj=shuijin(a[i].m[b].yfgz);a[i].m[b].sfgz=shifazsfgz(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj);a[i].zsfgz=0;for(k=0;k<12;k++){a[i].zsfgz+=a[i].m[k].sfgz;}sm++;c=0;while(c!=1 && c!=2){printf("1 继续\n2 返回主菜单\n");scanf("%d",&c);}if(c==1){ goto label_1; }if(c==2){ goto label_2; }}}else{if(a[i].m[b].yuefen==b+1){c=0;while(c!=1 && c!=2){printf("已有该月记录\n1 覆盖原有记录\n2 返回上级\n");scanf("%d",&c);}if(c==1){printf("请输入此人该月的应发工资,水费,电费:\n");scanf("%d%d%d",&a[i].m[b].yfgz,&a[i].m[b].sf,&a[i].m[b].df);a[i].m[b].sj=shuijin(a[i].m[b].yfgz);a[i].m[b].sfgz=shifazsfgz(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj);a[i].zsfgz=0;for(k=0;k<12;k++){a[i].zsfgz+=a[i].m[k].sfgz;}while(c!=1 && c!=2){printf("1 继续\n2 返回主菜单\n");scanf("%d",&c);}if(c==1){ goto label_1; }if(c==2){ goto label_2; }}else{ goto label_1; }}if(a[i].m[b].yuefen==NULL){a[i].m[b].yuefen=b+1;printf("请输入此人该月的应发工资:\n");scanf("%f",&a[i].m[b].yfgz);printf("请输入此人该月所用水费:\n");scanf("%f",&a[i].m[b].sf);printf("请输入此人该月所用电费\n");scanf("%f",&a[i].m[b].df);a[i].m[b].sj=shuijin(a[i].m[b].yfgz);a[i].m[b].sfgz=shifazsfgz(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj);a[i].zsfgz=0;for(k=0;k<12;k++){a[i].zsfgz+=a[i].m[k].sfgz;}c=0;while(c!=1 && c!=2){printf("1 继续\n2 返主主菜单\n");scanf("%d",&c);}if(c==1){ goto label_1; }if(c==2){goto label_2; }}c=0;while(c!=1 && c!=2){printf("1 继续\n2返回主菜单\n");scanf("%d",&c);}if(c==1){goto label_1; }if(c==2){goto label_2; }}label_2:fp=fopen("D:工资信息.txt","r+");for(j=0;j<sm;j++);{ fwrite(&a[i],sizeof(struct worker),1,fp); }fclose(fp);}/*__________________主函数_______________________________*/void main(){int a=0;duqu();while(a!=6){printf("/*******************欢迎使用*********************/\n");printf("/************* 请按菜单选项进行选择*************/\n");printf("/************* 1.查询个人工资情况*************/\n");printf("/************* 2.录入工资信息*************/\n");printf("/************* 3.删除个人工资信息*************/\n");printf("/************* 4.浏览员工工资信息*************/\n");printf("/************* 5.个人工资排序信息*************/\n");printf("/************* 6.退出工资管理系统*************/\n");printf("/******************^_^ ^_^ ^_^*******************/\n");scanf("%d",&a);switch(a){case 1:chaxun();break;case 2:luru();break;case 3:shanchu();break;case 4:liulan();break;case 5:paixu();break;default :break;}}}。