工资管理系统实验报告

高级语言程序设计

课程设计报告

 

Experiment Designing reporter

课程名称  : 高级语言程序设计

英文名称  :  C Program Experiment Designing

专    业  : 自动化 111

学    号  : 11057127、11057116、11057101

                  姓    名  : 王泽 、 孟凡壮 、 常明杰

指导教师  : 杨 福 刚

日    期:  2011 年 6月 18日至 20## 年6 月 21 日

                               山东工商学院信电学院

 一 :课程设计内容

程序功能介绍

现在,各大公司雨后春笋般屹立在中国大地上,各个公司都有自己的工资管理系统,今天我们自己创造了一个全新的工资管理系统,具体如下:工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。

设计思路

整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。

(1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。

(2)输入模块

   按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。

(3)添加模块

增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式。

(4)浏览模块

通过菜单选择按照工资卡号还是姓名浏览。如果按照卡号浏览,则显示的记录按照卡号升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。

(5)排序模块

排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。排序方法可以选择冒泡排序、插入排序、选择排序等。

(6)查询模块

实现按照工资卡号和姓名的查询,采用基本的查找方法即可。

(7)统计模块

输入起止月份,按照职工卡号和月份查询记录,把起止月份之间的实发工资金额累加。

.工资管理系统程序详细程序

经过小组成员的认真研究 我们做出如下程序

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

//#include<alloc.h>

#define N 150

void enter();

search();

void add();

void browse();

void stat();

void order();

void num_order();

void T_wage_order();

void menu();

void stat();

void readfiles();

void browse();

void menu()

{

  int n,w;  system("cls");

  do

  {

     puts("\t\t*********************MENU*********************\n\n");

     puts("\t\t\t\t1.Enter new data");

     puts("\t\t\t\t2.Addition data");

     puts("\t\t\t\t3.Browse all");

     puts("\t\t\t\t4.Search data");

     puts("\t\t\t\t5.Order data");

     puts("\t\t\t\t6.Stat by month");

     puts("\t\t\t\t7.Exit");

     puts("\n\n\t\t**********************************************\n");

     printf("choice your number(1-7):[]\b\b");

     scanf("%d",&n);

     if(n<1||n>7) {w=1;getchar();} else w=0;

                          

  }

  while(w==1);

  switch(n)

  {

     case 1:enter();break;

     case 2:add();break;

     case 3:browse();break;

     case 4:search();break;

     case 5:order();break;

     case 6:stat();break;

     case 7:exit(0);

  } 

}

void save();

int load();

void input();

void printf_face();

void printf_one();

void printf_back();

intT_wage();

/************************主函数 *************************/

main(){main();}

struct infowage

{

    char num[15];

    char name[20];

    int month;

    int S_wage;

    int water_rate;

    int electric_charge;

    int tax;

    int T_wage;

}IM[N];

void enter()

{

    int i,n;

    printf("\n Enter data now\n\n");

    for(i=0;i<n;i++)

    {

        printf("\n Input %dth info.\n",i+1);

        input(i);

    }

    if(i!=0)save(n);

    printf_back();

}

void add()

{

    int i,k,n,m,l;

    FILE*fp;

    n=load();

    printf("How many IMloyees are you want to add(0-%d)?:",N-1-n);

    scanf("%d",&m);

    k=n+m;

    for(i=n;i<k;i++);

    {

        printf("\n Iuput %dth info.\n",i-n+1);

        input(i);

    }

    if((fp=fopen("infowage.txt","ab"))==NULL)

    {printf("Cannot open file\n");

    }

    for(i=0;i<n;i++)

    if(fwrite(&IM[i],sizeof(struct infowage),l,fp)!=l)

    printf("file write error\n");

    fclose(fp);

    pintf_back();

    }

   

   

    void browse()

{int i,k,n;

n=load();

printf_face();

for(i=0;i<n;i++)

 {if((i!=0)&&(i%5==0))

   {printf("\n\nPass any key to continue...");

    getch();

    puts("\n\n");

   }

 printf_one(i);

 }

printf("\tThere are %d info.\n",n);

printf("\nPass any key to back...") ;

getch();

menu();

}

search()

{

    int k=0;int w1,w2;

    do

    {

        printf("\n\nWhich way do you choose?\n\t.By name   2.By num []\b\b");

        scanf("%d",&w1);

        if(w1=1)name_search();

        else num_search();

        if(k!=-1)

      {

            printf("\n\nSuccessful.^-^.");

            printf("\n\nWhat do you want to do?\n\t1.Search another  2.Back []\b\b");

            scanf("%d",&w2);

      }

    }

    while(w2==1);

    menu();

}

name_search()

{

    int i,n,k,w=1;

    struct infowage e;

    n=load();

    do

    {

        k=-1;

        printf("\n\nEnter name that you want to search! Name:");

        scanf("%s",e.name);

        printf-face();

        for(i=0;i<n;i++)

        if(strcmp(e.name,IM[i].name)==0)

      {

        k=i;

            printf-one(k);break;

      }

        if(k==-1)

      {

            printf("\n\nNo exist!");

      }

    }

    while(k==-1&&w==1);

}

num_search()

{

  int i,n,k,w=1;

  struct infowage s;

  n=load();

  do

    {

        k=-1;

        printf("\n\nEnter num that you want to search! No.:");

        scanf("%s",s.num);

        printf-face();

        for(i=0;i<n;i++)

        if(strcmp(s.num,IM[i].name)==0)

      {

        k=i;

            printf-one(k);break;

      }

        if(k==-1)

      {

            printf("\n\nNo exist!");

      }

    }

    while(k==-1&&w==1);

}

void order()

{int k=0;   int w1,w2;

 do

 {printf("\n\nWhich way do you choose?\n\t1.By num  2.By T_ wage  []\b\b");

  scanf("%d",&w1);

  if(w1==1)num_order();

  else T_wage_order();

  if(k!=-1)

    {printf("\n\nSuccessful.^_^.");

     printf("\n\nWhat do you want to do?\n\t1.order another  2.Back  []\b\b");

     scanf("%d",&w2);  

    }

 }while(w2==1);

  menu();}

void num_order()    /*卡号排序*/

{  int i,j,k,n;  struct infowage s;

   n=load();

    for(i=0;i<n-1;i++)

    {k=i;for(j=i+1;j<n;j++)

    if(IM[j].num>IM[k].num)k=j;

    s=IM[i];  IM[i]=IM[k];  IM[k]=s;

printf("%11s%-17s%6d%6d%6d%6d%6d%6d",IM[i].num,IM[i].name,IM[i].month,IM[i].water_rate,IM[i].electric_charge,IM[i].tax,IM[i].T_wage);

printf("%11s%-17s%6d%6d%6d%6d%6d%6d",IM[k].num,IM[k].name,IM[k].month,IM[k].water_rate,IM[k].electric_charge,IM[k].tax,IM[k].T_wage);}

save();

puts("\n\n");

}

voidT_wage_order()

{ int i,j,k,n;  struct infowage s;

  n=load();

    for(i=0;i<n-1;i++)

    {k=i;for(j=i+1;j<n;j++)

    if(IM[j].T_wage<IM[k].T_wage)k=j;

    s=IM[i];IM[i]=IM[k];IM[k]=s;

printf("%11s%-17s%6d%6d%6d%6d%6d%6d",IM[i].num,IM[i].name,IM[i].month,IM[i].S_wage,IM[i].water_rate,IM[i].electric_charge,IM[i].tax,IM[i].T_wage);

save();

puts("\n\n");

       

   }

   

   

    void stat()

{readfiles();

  allwage();

}

void readfiles()

{int n;  n=load();

 printf_face(n);

int allwage()

{int i,j,month;   int allwage=0;  struct infowage s[100];

 FILE*fp;  char filename[30];

 printf("Please input T_wage information filename:");

 scanf("%s",filename);

 if((fp=fopen("filename","rb"))!=NULL)

 {printf("File open error.\n");

   exit(0);

 }

 i=0;

 while(!(feof(fp)))

 {fscanf(fp,"%d%s%d%d",&IM[i].num,IM[i].name,&IM[i].month,&IM[i].T_wage);i++;}

 printf("Please input month searched:");

 scanf("%d",&month);

 printf("The result searching as follows:\n");

 printf("Num Name Month T_wage:\n");

 for(j=0;j<i;j++)

   if(IM[j].month==month)

   {printf("%5d%10s%3d%10d\n",IM[j].num,IM[j].name,IM[j].month,IM[j].T_wage);

    allwage+=IM[j].T_wage; 

    }

 fclose(fp);

 getchar();

 getchar();

 menu();   

}

   

}

void save(int n)

{

    FILE *fp;

    int i,l;

    if((fp=fopen("S_wage.txt","wb"))==NULL)

    {

        printf("\nCannot open file\n");

        return;

    }

for(i=0;i<n;i++)

if(fwrite(&IM[i],sizeof(struct infowage),l,fp)!=l)

printf("file write error\n");

fclose(fp);

}

int load()

{FILE*fp;

int i,l;

if((fp=fopen("S_wage","rb"))==NULL)

   {printf("\nCannot open file\n");

   return NULL;

   }

   for(i=0;!feof(fp);i++)

   fread(&IM[i],sizeof(struct infowage),l,fp);

   fclose(fp);

   return(i-l);

}

void num_input(int i)

{

    int j,wl;

    do

    {

        wl=0;

        printf("NO.:");

        scanf("%s",IM[i].num);

        for(j=0;IM[i].num[j]!='\0';j++)

         if(IM[i].num[j]<'\0'||IM[i].num[j]>'\9')

           {puts("Input error!Only be made up of(0-9).Please reinput!\n");

           wl=1;break;

       

            }

    }while(wl==1);

}

void name_input(int i)

{int j,w1;

do

{w1=0;

printf("Name:");

scanf("%s",IM[i].name);

for(j=0;'a'<=IM[i].name[j]<='z';j++)

 {if(j==0)

  {IM[i].name[j]-=32;

   w1=1;break;

  }

 if(j!=0&&IM[i].name[j]!='\0')

  {IM[i].name[j+1]-=32;

   w1=1;break;

   

  }

 }

   

}

while(w1==1);  

}

void tax(int i)

{int m;

 m=IM[i].S_wage;

 if(m<=800)IM[i].tax=0;

 else if(800<m<=1400)IM[i].tax=(m-800)*5/100;

 else IM[i].tax=(m-1400)*10/100;

}

int T_wage(int i)

{

    IM[i].T_wage=IM[i].S_wage-IM[i].water_rate-IM[i].electric_charge-IM[i].tax;

    return IM[i].T_wage;

}

void input(int i)

{num_input(i);

 printf("Name:");

 printf("Mon:");

 printf("S_wage:");

 printf("Water_rate");

 printf("electric_charge");

 tax(i);  T_wage(i);

}

void printf_one(i)

{

printf("%11s    %-17s   %6d   %12.2f    %9.2f    %9.2f    %9.2f    %9.2f",IM[i].num,IM[i].name,IM[i].month,IM[i].S_wage,IM[i].water_rate,IM[i].electric_charge,IM[i].tax,IM[i].T_wage);

}

void printf_back()

{int k,w;

 printf("\n\n\tSuccessful.^_^\n\n");

 printf("What do you want to do?\n\n\t1.Browse\t2.Back:[]\b\b");

 scanf("%d",&w);

 if(w==1)browse();

 else menu();  

}

三 .课程设计总结

我们课程设计在老师规定的四天中完成,现在回想四个下午的奋斗得到了这样的成绩感觉很是有成就感,我由畏惧程序到自己慢慢琢磨,再到完整做出感受到了很多收获与进步。刚刚接到任务,感觉我们组所抽到得题目要求很少,想当然的认为了题目很简单,但是静下心来看看,自己还是无处下手,学了半年的C语言课程竟然找不到合适的解决方案,三人商议无果,最终选择了百度大侠,看到一堆堆的程序我们仔细筛选,终于选择了一个感觉很适合自己的进行改编。

  俗话说:“三个臭皮匠,顶个诸葛亮。”但是在C语言中我们真的没有感到我们三个能比上诸葛亮,只是不断的翻书,不断地百度。当开始的时候我们把程序全部打到软件中感觉大功告成之时,运行后才发现有接近一百错误,直接让我们三个崩溃,没办法只有硬着头皮进行修改、测试、运行,看着错误的不断减少,我们的信心也逐渐加强,最终我们战胜了苦难,将程序完整做出!

在设计这个程序时,我们刚开始是根据老师给我们提供的资料,用画图以及循环将框架设计出来,但是接下去便无从下手了,计算是个关键和难点,我们也查了相应的资料,但是它上面用得是坐标来做的,所以为了方便设计程序,我们也改为坐标来做的,这样计算问题解决了。接下去就是按键问题,我们的资料是用鼠标做的,所以关于按键这个函数就只能我们自己设计,还好手头有类似的资料,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我们搞定了。最后就是闪烁,这个设计的方法很死板,都一个类型,就是算坐标比较烦琐,要确定好它的位置,但是这些只要你自己愿意去尝试,问题都可以迎刃而解的。

从这一个多星期的设计过程中,我看到了大家的拼搏与努力,也让我知道团队精神得难能可贵,尽管一年下来大家不怎么有多大接触,但是彼此之间的友谊已经在我们心里扎根生底,在遇到问题时,我们会共同进退,每个人都很慷慨不会因为是通过自己艰辛劳动设计出来的东西而不准他人剽窃了。

 

   通过本次的程序设计,我们感受到书本知识与实践的差距是相当大的,本来就不够扎实的书本知识用到实践真的是九牛一毛。同时我感觉我们的程序设计时间的安排正是恰到好处,以实践考察知识,以错误督促我们复习知识。同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说函数的循环调用的使用,结构体,数组,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

二十一世纪的我们,需要更多的运用计算机,无疑C语言是考察我们的很重要一点,我们不光要学到知识,更重要的是我们要提高自己的动手实践能力,使我们的知识真正得到利用。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

总之,经过这么长时间的努力我们收获很多,受益匪浅,是我们大学生活中不可多得的财富。

 个人感受:

小组成员(王泽)

经过四个下午的奋斗,我和同组同学一同完成了本次课程设计。在这个过程中我感到有苦也有甜,我总结了以下几点感悟:

1、         一开始的时候自己感觉平时打字挺快,便自告奋勇的承但了多数敲打任务。面对数百行的程序我直接傻了眼,开始便吃到了苦头,但是我还是硬着头皮把它打完,后来发现自己的指法在这几天中得到了很大的锻炼,真是一份耕耘,一份收获!

2、“书到用时方恨少”,通过半年的C语言学习在最后的课程设计中得到了巨大的考验,课本知识的不足,使我不得不一遍一遍的翻课本找知识点,浪费了很多时间,同时我也感受到知识与实践的差距。

3、面对大程序不再像原来一样害怕,这几天我们也攻克了一个这样庞大的程序。我感到再大的程序也是由简单的程序拼凑而成,无非用到了一些方法例如嵌套、选调等结合。我相信以后再次见到大程序我也有信心将它理顺清晰。

4、自信心的提高。大学是个自学的为重的阶段,通过这四天的设计,我也是在不断的自学,学习书本上没有的函数,查找原来没有见过的英文错误,这个过程也见证着自己的自学能力的提高,肯定了自己的能力,也让自己更有信心。

5、提高了对C语言的兴趣,看着自己修改过的程序得到运行,自己由衷的高兴,同时又感觉自己可以做一些自己喜欢的东西,比如一些小游戏和小系统什么的。

   程序设计虽然已经过去,他的影响还一直存在着,我一定会记得这次设计的宝贵经验。

小组成员(孟凡壮)

为期四天的c语言课程设计很快就结束了,时间虽然很短,却感觉学到了好多的东西。当我们的程序试运行的时候,系统提示有将近二百个错误,我当时就崩溃了,还好有同伴的协作我们最终把程序调试完成了,心里是无比的幸福:所以,做什么事情在心理上首先要克服恐惧心理。对于c语言本身来说,通过这次试验我深刻地认识到学习c语言的重要性,不仅要深刻地了解课本知识,更重要的是进行上机操作,学会实际运用;所以以后要重视实验,只有理论和实践相结合才能对知识掌握的更好。还有就是在编程序的时候,必须要把输入输出结构弄好,熟悉怎样实现函数的调用,怎样用循环结构实现各项信息的输入与输出。怎样利用指针进行信息的传送以及怎样用全局变量对数据完成传送过程。定义变量时,什么情况下应该定义为全局变量,什么时候应该定义为局部变量。最好把整个程序模块化,把每一个模块编译出来然后运行,最后利用函数调用组合成一个完整的程序,这样方便检查错误并且让程序更清晰,每一步的目标更明确。总的来说,对于这次的程序设计,着实让我大开了眼界,第一次看到了如此大的程序,真正体会到了c语言博大精深,以后一定会好好学习c语言。

小组成员(常明杰)

   经过四个下午的C语言编程,我感受颇深,当初抽到我们组编的程序是工资管理系统时觉得挺高兴,因为觉得挺简单,而且随后我们又在网上找到了很相似的一个程序更是欣喜若狂,但最后结果给了我们当头一棒,事实并没我们想的那么简单。现在我就详细表述一下我的感受。

(1)看不懂题目上提示自己的各模块的程序,很多新的C语言都不认识。所以很难继续去做。

(2)当我们从网上找到类似的程序时,那程序竟然无法复制,而且一共三百多句C语言,我们只能靠自己去键盘输入,我却发现自己的还不能实现盲打,打字很慢。

(3)当我们组分开把属于自己的程序打完后,然后就开始整合,整合的过程中发现不知道是否考虑各模块的顺序,这时觉得自己C语言学的不咋地!

(4)程序输入完毕以后觉得程序应该没什么问题了,就算有点错误也会很少,但真运行的时候却发现错误上百,很多都是自己键盘输入时粗心造成的,而且自己很难找出。

   现在编程已经结束了,但有种想继续下去的冲动,喜欢上了这种感觉,觉得自己学到了很多很多东西,更觉得自己还有很多东西要去学。总归一句话,这次经历让我懂的了许多,学会了许多!

                                               

                                                                                

                                                                                      

                                                                        

王泽   11057127

孟凡壮  11057116

常明杰  11027101

                                                                                         

自动化 111

                                                                                

                                                                                日期  20##年6月21日  星期四

                                                                       

 五  课程设计相关图片

1、主函数模块:

2、输入模块

3、添加模块

4、浏览模块

5、查找模块

6、排序模块

7、统计模块

8、退出模块

相关推荐