北京林业大学《高校教师工资管理系统》课程设计

                                   北 京 林 业 大 学

2020学年—2021学年第1学期  程序设计基础课程设计  实习报告书

实习内容:  高校教师工资管理系统  

实习环境:  Sublime Text 3   

 

目录

一、实习步骤

二、实现方法概述

三、技术方案实现

3.0 数据存储结构

3.0.0本地存储结构(**创新点**)

3.0.1 教师信息结构体 及 学院职称映射数组

3.0.2 薪资信息结构体

3.0.3 学院平均值统计结构体 与 职称平均值统计结构体

3.1 Operation Functions 概述

3.2 Check Functions 概述

3.2.1 checkten()--对输入的数字范围进行检测

3.2.2 checkdb()--检测用户输入是否为实数

3.2.3 checkid()--检测用户输入id是否合法且合规

3.2.4 checkname()--检测用户名字是否存在

3.2.5 checkmon()--用以检测所要查询的月份是否存在salary信息中

3.3 Storage Functions 概述

3.3.1 inpter() inpsal()--ter输入函数 与 sal输入函数

3.3.2 delter() delsal()--删除教师信息及薪资信息

3.3.3 自定义简便SQL操作

3.4 Algorithm Functions 概述

3.4.1 showter()--可选mode的教师信息列表打印函数

3.4.2 searchterid() searchsalid()--寻找所传id对应的实际索引以便后续操作

3.4.3 swapter()swapsal()swapcol()swapjob()--交换函数

3.4.4 sortter_id() sortsal_id()--排序函数

3.4.5 calcolavg_sort() caljobavg_sort()--实现统计分析排序功能的函数

3.4.6 FreshSalName()--同步sal与ter之间的信息

四、结果展示:

4.0开始界面

4.1进入录入数据并保存功能

4.1.1教师信息录入功能

4.1.2录入教师工资信息

4.1.3 保存到本地功能

4.2 进入修改数据并保存功能

4.2.1 根据工号修改某位教师的基本信息和工资信息

4.2.2 根据姓名修改某位教师的基本信息和工资信息

4.2.3 删除某一工号的教师的所有信息

4.3查询显示功能

4.3.1展示所有教师的基本信息

4.3.2根据月份显示所有教师当月工资信息(以工号为序)

4.3.3根据工号查询某位教师某一月份的基本信息和工资信息

4.3.4根据姓名查询某位教师某一月份的基本信息和工资信息

4.4统计分析

4.4.1根据月份,统计不同学院教师的平均应发工资和平均实发工资

4.4.2根据月份,统计不同职称教师的平均应发工资和平均实发工资

4.5从本地导入数据(**创新点**)

4.6保存并退出功能

五、结束语:

 

 

 

 

 

 

一、实习步骤:

    我于第一天进行该项目的整体分析及技术方案的选择,第二天进行该程序的编码工作,第三天进行程序的测试工作和报告的书写工作。

 

二、实现方法概述:

根据要求,该程序完全基于C语言实现,未使用任何外部库文件。代码全部手敲完成,无任何借鉴复制行为。且编写代码的全过程已录制视频,并将快放版上传至B站:其地址为:https://www.bilibili.com/video/BV1Af4y1e7Tc/

该程序按照实验要求分为五大模块,完全实现实验要求的所有功能。存储在程序内采用结构体的方式,由于禁止使用SQL库函数,所以我自己手写了一套简化版的SQL生成与解析函数,用于程序在本地的存储结构(可实现对之前数据,或样例数据的导入)。

设计采用自顶向下的方式,将每个大问题细化为各个小问题。将需要重复用到的解决方案算法生成为可选择模式的函数(如4.0.1 showter()),以达到简化代码量且提高可移植性的目标。每完成一个小模块便进行测试,以确保程序的正确性。

本系统系统功能结构

 

三、技术方案实现:

该程序的函数功能分为四大模块,接下来将一一介绍。

 

3.0 数据存储结构

3.0.0本地存储结构(**创新点**)

由于该项目禁止使用SQL数据库的相关库文件,我自己写了一套类似于SQL存储结构的生成函数及解释函数。其于本地存储的样式类似于SQL中的insert values()语句。

  1. (0000000001,wu zheng,3,2)  
  2. (0000000003,qian,3,2)  
  3. (0000000001,wu zheng,3,2,2,200.00,100.00,56.00,300.00,244.00)
  4. (0000000001,wu zheng,3,2,3,45.00,6.00,6.00,51.00,45.00) 

接下来将首先介绍该简化SQL的生成方法

  1. void savetolocter()  
  2. {  
  3.     // (id,name,colid,jobid)  
  4.     FILE * f1;  
  5.     f1=fopen("terdata.dat","w+");  
  6.     if(f1==NULL){printf("save to local unaviliable\n");return;}  
  7.     int i;  
  8.     for(i=0;i<tercnt;i++)  
  9.     {  
  10.         char tline[101]="(", tnum[5];  
  11.         strcat(tline,ter[i].id);  
  12.         strcat(tline,",");  
  13.         strcat(tline,ter[i].name);  
  14.         strcat(tline,",");  
  15.         strcat(tline,itoa(ter[i].collegeid,tnum,10));  
  16.         strcat(tline,",");  
  17.         strcat(tline,itoa(ter[i].jobid,tnum,10));  
  18.         strcat(tline,")");  
  19.         fprintf(f1, "%s\n", tline);  
  20.     }  
  21.     fclose(f1);  
  22. }  
  23.   
  24. void savetolocsal()  
  25. {  
  26.     FILE * f1;  
  27.     f1=fopen("saldata.dat","w+");  
  28.     if(f1==NULL){printf("save to local unaviliable\n");return;}  
  29.     int i;  
  30.   
  31.     for(i=0;i<salcnt;i++)  
  32.     {  
  33.         char tline[201]="(", tnum[12];  
  34.         strcat(tline,sal[i].id);  
  35.         strcat(tline,",");  
  36.         strcat(tline,sal[i].name);  
  37.         strcat(tline,",");  
  38.         strcat(tline,itoa(sal[i].collegeid,tnum,10));  
  39.         strcat(tline,",");  
  40.         strcat(tline,itoa(sal[i].jobid,tnum,10));  
  41.         strcat(tline,",");  
  42.         strcat(tline,itoa(sal[i].month,tnum,10));  
  43.         strcat(tline,",");  
  44.         strcat(tline,d2s(sal[i].basicsal,tnum));  
  45.         strcat(tline,",");  
  46.         strcat(tline,d2s(sal[i].addsal,tnum));  
  47.         strcat(tline,",");  
  48.         strcat(tline,d2s(sal[i].subsal,tnum));  
  49.         strcat(tline,",");  
  50.         strcat(tline,d2s(sal[i].theosal,tnum));  
  51.         strcat(tline,",");  
  52.         strcat(tline,d2s(sal[i].truesal,tnum));  
  53.         strcat(tline,")");  
  54.         fprintf(f1, "%s\n", tline);  
  55.     }  
  56.     fclose(f1);  
  57.   
  58. }  

其核心思想为模拟SQL的数据以逗号为分割的方式,将数据行通过fprintf结构化的存入到文件中,以便后续的读取。

 

接下来将介绍该SQL语句的解析函数

  1. void loadlocter(char * loc)  
  2. {  
  3.     FILE * f1;  
  4.     f1=fopen(loc,"r");  
  5.     if(f1==NULL){printf("load to here unaviliable\n");return;}  
  6.       
  7.     tercnt=0;  
  8.     char tinp[100];  
  9.     while(fgets(tinp,300,f1)!=NULL && tinp[0]!=10)  
  10.     {  
  11.         char tid[11],tna[31];  
  12.         int tcd,tjd;  
  13.         int i;  
  14.         for(i=1;i<=10;i++) tid[i-1]=tinp[i];  
  15.         int tcnt=0;  
  16.         for(i=12;tinp[i]!=',';i++) tna[tcnt++]=tinp[i];  
  17.         tna[tcnt]='\0';  
  18.         tcd=atoi(&tinp[i+1]);  
  19.         tjd=atoi(&tinp[i+3]);  
  20.   
  21.         strcpy(ter[tercnt].id,tid);  
  22.         strcpy(ter[tercnt].name,tna);  
  23.         ter[tercnt].collegeid=tcd;  
  24.         ter[tercnt].jobid=tjd;  
  25.         tercnt++;  
  26.   
  27.         //(1234567890,de d,1,1)  
  28.     }  
  29.     fclose(f1);  
  30.     sortter_id();  
  31. }  
  32.   
  33.   
  34. void loadlocsal(char * loc)  
  35. {  
  36.     FILE * f1;  
  37.     f1=fopen(loc,&#
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值