一 : 软件工程课程设计 实验报告 房产管理系统
软件工程课程设计报告
学 院: 班 级: 姓 名: 指导教师:
房产管理系统
实验要求
1. 两人一组。
2. 熟悉Visio开发环境,认真分析题目。
3. 掌握UML的基本模型元素(如角色、用例、类、数据模型等),准确把握所要开发系统的功能需求,认真完成系统前期的需求分析,绘制出系统的业务流程图。
4. 建立完善的角色与用例的关系,绘制出系统的用例图。
5. 分析用例为完成业务目标而进行的各项任务或活动及执行顺序,绘制出用例要求所要进行的活动以及活动间的约束关系的活动图。
6. 分析各用例的可能状态及状态间的转移,描述状态变化序列的起点和终点,绘制出系统的状态图。
7. 进行业务流的分析,根据系统所要完成的功能和所要处理的数据,画出反映系统逻辑模型的数据流程图。
8. 通过分析系统的功能要求,抽象出系统的实体类,描述各实体类的属性,建立各个实体类及它们之间的关联,绘制系统的实体类图。
9. 总结分析出系统的各功能模块,绘制系统各子模块的结构图。
10. 模块的结构设计完成后,进行功能模块的界面风格和要求规范的设计,实现变量命名规范和模块命名规范的设计,根据设计结果撰写各模块说明书
11. 进行检查,并提交设计报告。
实验题目:房产管理系统
需求分析
在我国住房管理是一个关系到每个人切身利益的大问题。某大学拟开发一个用计算机进行房产管理的系统,要求系统具有分房、调房、退房和咨询统计等功能。
房产科把用户申请表输入系统后,系统首先检查申请表的合法性,对不合法的申请表系统会拒绝接受;对合法的申请表则根据其类型分别进行处理。 如果是分房申请,则根据申请者的情况(年龄、工龄、职称、职务、家庭人口等)计算其分数,当分数高于阈值分数时,按分数高低将申请表插到分房队列的适当位置。每月最后一天进行一次分房活动:从空房文件中读出空房信息(房号、面积、等级、单位面积房租等);把好房优先分配给排在前面的符合该等级住房条件的申请者,从空房文件中删除这个房号的信息,从分房队列中删除该申请者;把此房号的信息和住房信息一起写入住房文件中,输出住房分配单给住户,同时计算房租写入房租文件中。
如果是退房申请,则从住房文件和房租文件中删除有关信息,再把此房号的信息写到空房文件中。
如果是调房申请,则根据申请者的情况确定其住房等级,然后在空房文件中
查找属于该等级的空房,退掉原住房,再进行与分房类似的处理。 住户可向系统询问分房的阈值分数,居住某类房屋的条件,某房号的单位面积房租等信息。房产科可要求系统打印出住房情况的统计表,或更改某类房屋的居住条件、单位面积房租等信息。
系统总体设计
1、用例图:用例分房申请、调房申请退房申请、咨询、分数、分房、调房、退房,参与者有住户和房产科
2、房屋管理系统结构图
3、分解“房屋变更申请”功能
系统详细设计
活动图
流程图
1、 分房流程
2、调房流程
3、退房流程
数据流图
1. 分房管理数据图
2、 退房管理流程图
实体类图:
心得体会
通过本次课程设计,让我对理论课上的内容有了更深刻的理解,实践让我感受到了自己的专业技能仍需要进一步提高,流程图需要认真细致,更需要清晰的逻辑思维。我会努力提升自己,迎头赶上
二 : C语言课程设计——职工工资管理系统
设计一个职工工资管理系统,其功能包括:
(1)职工基本工资信息录入
包括工号,姓名,应发工资,奖金,扣款,应发工资,扣税,实发工资。
(2)职工基本工资信息保存
(3)职工基本工资信息查询
按照工号查询
按照姓名查询
(4)职工基本工资信息显示
在屏幕上显示所有的职工基本工资信息。
(5)职工基本工资信息更新
能够实现修改,删除,插入,排序功能。
(6)职工基本工资信息统计
统计公司员工工资在各等级的人数
主界面系统主界面应有如下功能选项
录入职工基本工资信息
查询职工基本工资信息
保存职工基本工资信息
删除职工基本工资信息
插入职工基本工资信息
修改职工基本工资信息
统计职工基本工资信息
排序职工基本工资信息
显示职工基本工资信息
退出
代码如下:
#include<stdio.h>
typedefstruct employee
{
char num[10];//保存职工编号
char name[15];//保存职工姓名
float jbgz;//保存职工基本工资
float jj;//保存职工奖金
float kk;//保存职工扣款
floatyfgz;//保存职工应发工资
float sk;//保存职工税款
float sfgz;//保存职工实发工资
}ZGGZ;
voidmenu()
{
printf("Empoyee System\n");
printf("--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@\n");
printf("*1 inputrecord*2 deleterecord\n");
printf("*3 searchrecord*4 modifyrecord\n");
printf("*5 insertrecord*6 countrecord\n");
printf("*7 sortrecord*8 saverecord\n");
printf("*9 displayrecord*0 quitrecord\n");
printf("--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@--<-<-<@\n");
printf("Please enter you choice(0-9)\n");
}
intinput(ZGGZ a[],int k)
{
int j,x;
char str[10];
j=x=0;
while(1)
{
printf("----------------------------\n");
printf("请输入职工的编号:(按0返回主菜单)");
scanf("%s",str);
strcpy(a[k].num,str);
for(j=0;j<k;j++)
{
if(strcmp(a[j].num,str)==0)
{
printf("已经有工号为%s的员工信息!请重新输入员工号。\n",str);
printf("请输入职工的编号:");
scanf("%s",str);
strcpy(a[k].num,str);
}
}
if(strcmp(a[k].num,"0")==0)
break;
printf("请输入职工的姓名:");
scanf("%s",a[k].name);
printf("请输入职工的基本工资:");
scanf("%f",&a[k].jbgz);
printf("请输入职工的奖金:");
scanf("%f",&a[k].jj);
printf("请输入职工的扣款:");
scanf("%f",&a[k].kk);
a[k].yfgz=a[k].jbgz+a[k].jj-a[k].kk;
a[k].sk=a[k].yfgz*(0.05);
a[k].sfgz=a[k].yfgz*(0.95);
k++;
}
return k;
}
intdel(ZGGZ a[],int y)
{
int i=0;
int x=0;
char str[15];
printf("请输入你要删除的编号或姓名:");
scanf("%s",str);
printf("--------删除成功--------\n");
for(i=0;i<y;i++)
if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name))
{
while(i<y)
{
strcpy(a[i].num,a[i+1].num);
strcpy(a[i].name,a[i+1].name);
a[i].jbgz=a[i+1].jbgz;
a[i].jj=a[i+1].jj;
a[i].kk=a[i+1].kk;
a[i].sfgz=a[i+1].sfgz;
a[i].sk=a[i+1].sk;
a[i].yfgz=a[i+1].yfgz;
i++;
}
x++;
}
if(x==0)
{
printf("输入的编号或姓名不存在,请重新输入:\n");
}
return y-x;
}
intsear(ZGGZ a[],int y)
{
int i;
int x=0;
char str[15];
printf("请输入你要查找的编号或姓名:");
scanf("%s",str);
for(i=0;i<y;i++)
if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name))
{
printf("员工编号为%s\n",a[i].num);
printf("员工姓名为%s\n",a[i].name);
printf("基本工资:%f\n",a[i].jbgz);
printf("奖金:%f\n",a[i].jj);
printf("扣款:%f\n",a[i].kk);
printf("应发工资:%f\n",a[i].yfgz);
printf("税款:%f\n",a[i].sk);
printf("实发工资:%f\n",a[i].sfgz);
x++;
}
if(x==0)
{
printf("未找到该记录\n");
return -1;
}
}
voidmod(ZGGZ a[],int y)
{
int i;
int x=0;
char str[15];
printf("请输入你要修改的编号:");
scanf("%s",str);
for(i=0;i<y;i++)
if(!strcmp(str,a[i].num)||!strcmp(str,a[i].name))
{
printf("请输入修改后职工的姓名:");
scanf("%s",a[i].name);
printf("请输入修改后职工的基本工资:");
scanf("%f",&a[i].jbgz);
printf("请输入修改后职工的奖金:");
scanf("%f",&a[i].jj);
printf("请输入修改后职工的扣款:");
scanf("%f",&a[i].kk);
printf("-------------修改成功------------\n");
a[i].yfgz=a[i].jbgz+a[i].jj-a[i].kk;
a[i].sk=a[i].yfgz*(0.05);
a[i].sfgz=a[i].yfgz*(0.95);
x++;
}
if(x==0)
{
printf("未找到要修改的编号\n");
}
}
intinsert(ZGGZ a[],int y)
{
int i;
int x=0;
char str[15];
printf("请输入你要插入的编号:");
scanf("%s",str);
printf("请输入一条新的记录信息:\n");
for(i=0;i<y;i++)
if(strcmp(str,a[i].num)==0)
{
x=i;
for(i=y;i>x+1;i--)
{
a[i].jbgz=a[i-1].jbgz;
a[i].jj=a[i-1].jj;
a[i].kk=a[i-1].kk;
a[i].sfgz=a[i-1].sfgz;
a[i].sk=a[i-1].sk;
a[i].yfgz=a[i-1].yfgz;
strcpy(a[i].name,a[i-1].name);
strcpy(a[i].num,a[i-1].num);
}
}
x++;
printf("请输入职工的编号:");
scanf("%s",a[x].num);
printf("请输入职工的姓名:");
scanf("%s",a[x].name);
printf("请输入职工的基本工资:");
scanf("%f",&a[x].jbgz);
printf("请输入职工的奖金:");
scanf("%f",&a[x].jj);
printf("请输入职工的扣款:");
scanf("%f",&a[x].kk);
a[x].yfgz=a[x].jbgz+a[x].jj-a[x].kk;
a[x].sk=a[x].yfgz*(0.05);
a[x].sfgz=a[x].yfgz*(0.95);
return y+1;
}
voidcount(ZGGZ a[],int y)
{
int q[11]={0,0,0,0,0,0,0,0,0,0,0};
int i;
int x;
for(i=0;i<y;i++)
{
x=(int)a[i].yfgz/1000;
switch(x)
{
case 9:q[1]++;break;
case 8:q[2]++;break;
case 7:q[3]++;break;
case 6:q[4]++;break;
case 5:q[5]++;break;
case 4:q[6]++;break;
case 3:q[7]++;break;
case 2:q[8]++;break;
case 1:q[9]++;break;
case 0:q[10]++;break;
default:q[0]++;break;
}
}
printf("应发工资在10000以上的人数为%d\n",q[0]);
printf("应发工资在9000到10000 的人数为%d\n",q[1]);
printf("应发工资在8000到9000的人数为%d\n",q[2]);
printf("应发工资在7000到8000的人数为%d\n",q[3]);
printf("应发工资在6000到7000的人数为%d\n",q[4]);
printf("应发工资在5000到6000的人数为%d\n",q[5]);
printf("应发工资在4000到5000的人数为%d\n",q[6]);
printf("应发工资在3000到4000的人数为%d\n",q[7]);
printf("应发工资在2000到3000的人数为%d\n",q[8]);
printf("应发工资在1000到2000的人数为%d\n",q[9]);
printf("应发工资在1000以上的人数为%d\n",q[10]);
}
voidsort(ZGGZ a[],int y)
{
int i,j;
float t;
char str[15];
for(j=0;j<y-1;j++)
for(i=0;i<y-1-j;i++)
if(a[i].sfgz>a[i+1].sfgz)
{
t=a[i].sfgz;
a[i].sfgz=a[i+1].sfgz;
a[i+1].sfgz=t;
t=a[i].jbgz;
a[i].jbgz=a[i+1].jbgz;
a[i+1].jbgz=t;
t=a[i].jj;
a[i].jj=a[i+1].jj;
a[i+1].jj=t;
t=a[i].kk;
a[i].kk=a[i+1].kk;
a[i+1].kk=t;
t=a[i].yfgz;
a[i].yfgz=a[i+1].yfgz;
a[i+1].yfgz=t;
t=a[i].sk;
a[i].sk=a[i+1].sk;
a[i+1].sk=t;
strcpy(str,a[i].num);
strcpy(a[i].num,a[i+1].num);
strcpy(a[i+1].num,str);
strcpy(str,a[i].name);
strcpy(a[i].name,a[i+1].name);
strcpy(a[i+1].name,str);
}
}
voidsave(ZGGZ a[],int n)
{
FILE *fp;
int i;
if((fp=fopen("sj.txt","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(i=0;i<n;i++)
if(fwrite(&a[i],sizeof(structemployee),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
voiddisplay(ZGGZ a[],int n)
{
int i=0;
if(n==0)
{
printf("Files are empty\n");
return;
}
do
{
printf("----------------------------\n");
printf("员工编号为%s\n",a[i].num);
printf("员工姓名为%s\n",a[i].name);
printf("基本工资:%f\n",a[i].jbgz);
printf("奖金:%f\n",a[i].jj);
printf("扣款:%f\n",a[i].kk);
printf("应发工资:%f\n",a[i].yfgz);
printf("税款:%f\n",a[i].sk);
printf("实发工资:%f\n",a[i].sfgz);
i++;
}while(i<n);
}
voidmain()
{
int selete,c=0;
int i=0;
int z=0;
char q,p,x,s;
ZGGZ b[100];
FILE *fp;
if((fp=fopen("sj.txt","rb"))==NULL)
printf("Not Found!\n");
else
{
do
{
fread(&b[i],sizeof(structemployee),1,fp);
i++;
}while(!feof(fp));
fclose(fp);
c=i-1;
}
while(1)
{
menu();
scanf("%d",&selete);
if(selete==0)
{
printf("Thank you for your use ( ^_^ ) Bye\n");
break;
}
switch(selete)
{
case1:c=input(b,c);break;
case2:
{
display(b,c);
do
{
c=del(b,c);
printf("是否继续删除,是按y,否则请按任意值\n");
getchar();
scanf("%c",&p);
}while(p=='Y'||p=='y');
break;
}
case3:
{
do
{
sear(b,c);
printf("是否继续查找,是按y,否则请按任意值\n");
getchar();
scanf("%c",&x);
}while(x=='Y'||x=='y');
break;
}
case4:
{
display(b,c);
do
{
mod(b,c);
printf("是否继续修改,是按y,否则请按任意值\n");
getchar();
scanf("%c",&q);
}while(q=='Y'||q=='y');
break;
}
case5:
{
do
{
c=insert(b,c);
printf("是否继续插入,是按y,否则请按任意值\n");
getchar();
scanf("%c",&s);
}while(s=='Y'||s=='y');
break;
}
case6:count(b,c);break;
case7:display(b,c);sort(b,c);break;
case8:save(b,c);break;
case9:display(b,c);break;
default:printf("Please try again\n");
}
}
}三 : 职工工资管理系统课程设计报告67
目 录
一、需求分析·········································2 二、概要设计·········································2 三、详细设计·········································5 四、调试分析·········································18 五、用户手册·········································19 六、测试数据·········································19 七、附录·············································23
一、 需求分析
职工工资管理系统 功能设计要求 (1)输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。?该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
(2)显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。
(3)修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
(4)查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。
(5)删除记录:可删除数据文件中的任一记录。 (6) 统计: (A)计算各项工资平均工资及总工资, (B)?统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元) 以内的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(?包括各项总的平均工资)。 (7)保存数据文件功能。 例如:职工工资信息表
ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资 01 张望 1286 794 198 109 135 2034 02 李明 1185 628 135 94 114 1740 03 王小民 895 438 98 64 73 1294 04 张效章 1350 868 210 116 150 2162 05 彭山 745 398 84 61 68 1098 ? ? ? ? ? ? ? ?
各项平均工资 1092.2 625.2 145 88.8 108 (要求:1.源文件采用多文件的工程结构2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)
二、概要设计
1、程序总体功能框架:
2、一些数据结构的介绍:
struct worker 定义职工的结构体 {
int num; 职工工号 char name[20]; 职工姓名
int jibengongzi; 职工的基本工资 int zhiwugongzi; 职工的职务工资 int jintie; 职工的津贴
int yiliaobaoxian; 职工的医疗保险 int gongjijin; 职工的公积金 int qiansan; 职工前三项工资(基本工资、职务工资、津贴)之和 int sum; 职工的总工资
}worker[100]; 建立最多为100,、名为worker的结构体
3、定义主要的函数:
void menu(); void Input(); void Modify(); void Search(); void Add(); void Delete(); void Show(); void Exit();
4、几个主要函数介绍:
○1清屏函数:system("cls"); 将前面操作的屏幕清楚,但不会清除数据 ○2菜单函数:menu(); 显示主菜单,便于选择 3输入函数:Input(); 用于输入数据 ○ ○4修改函数:Modify(); 用于修改数据 ○5查找函数:Search(); 用于查找信息 ○6添加函数:Add(); 用于增加信息 7删除函数:Delete(); 用于删除信息 ○
8显示函数:Show(); 用于显示信息 ○
9退出函数:Exit(); 用于退出该系统 ○
10选择函数:select(); 用于选择显示信息或返回到菜单 ○
11保存信息的函数:save(): 用于保存信息 ○
12保存人数的函数:P(); 用于保存已保存数据的人数 ○
5、本程序模块结构
⑴ 主函数模块 int main()
{
system("cls"); menu();
}
执行主函数后,执行菜单函数。 ⑵菜单函数模块 void menu() {
int n;
system("cls"); printf("\n\n\n");
printf("\t\t***********************************************\n"); printf("\t\t** **\n"); printf("\t\t** If you were the first to enter the system **\n");
printf("\t\t** please select Input! **\n");
printf("\t\t** **\n"); printf("\t\t** 1-------Input **\n"); printf("\t\t** 2-------Modify **\n");
printf("\t\t** 3-------Search **\n"); printf("\t\t** 4-------Add **\n"); printf("\t\t** 5-------Delete **\n"); printf("\t\t** 6-------Show **\n"); printf("\t\t** 7-------Exit **\n"); printf("\t\t** **\n"); printf("\t\t***********************************************\n");
printf("\t\t\n"); printf("\n\n");
printf("\t\tInput your choose(1-7):"); scanf("%d",&n); if(n>=1&&n<=7) {
switch(n) {
case 1:Input();break; case 2:Modify();break; case 3:Search();break; case 4:Add();break; case 5:Delete();break; case 6:Show();break; case 7:Exit();break; } } else
menu(); }
菜单函数中包括输入函数、修改函数、查找函数、添加函数、删除函数、显示函数、退出函数。根据菜单中各个函数代表的数字选择相应的数字进行操作。
三、详细设计
#include "stdio.h"
职工工资管理系统课程设计报告67_工资管理系统课程设计
#include "string.h"
struct worker //定义结构体
{
int num;
char name[20];
int jibengongzi;
int zhiwugongzi;
int jintie;
int yiliaobaoxian;
int gongjijin;
int qiansan;
int sum;
} worker[100];
void menu(); //定义几个主要的函数
void Input();
void Modify();
void Search();
void Add();
void Delete();
void Show();
void Exit();
int main() //主函数
{
system("cls");
menu();
}
void menu() //菜单函数
{
int n;
system("cls"); //清屏
printf("\n\n\n"); //菜单界面
printf("\t\t***********************************************\n");
printf("\t\t** **\n");
printf("\t\t** If you were the first to enter the system **\n");
printf("\t\t** please select Input! **\n");
printf("\t\t** **\n");
printf("\t\t** 1-------Input **\n");
printf("\t\t** 2-------Modify **\n");
printf("\t\t** 3-------Search **\n");
printf("\t\t** 4-------Add **\n");
printf("\t\t** 5-------Delete **\n");
printf("\t\t** 6-------Show **\n");
printf("\t\t** 7-------Exit **\n");
printf("\t\t** **\n");
printf("\t\t***********************************************\n");
printf("\t\t\n");
printf("\n\n");
printf("\t\tInput your choose(1-7):"); //选择需要进行的功能,选择1-7之间的数 scanf("%d",&n);
if(n>=1&&n<=7)
{
switch(n) //根据选择不同的数,实现不同的功能
{
case 1:Input();break;
case 2:Modify();break;
case 3:Search();break;
case 4:Add();break;
case 5:Delete();break;
case 6:Show();break;
case 7:Exit();break;
}
}
else
menu(); //如果选择的数不在1至7之间,返回菜单重新输入
}
void Input() //输入函数
{
int i,p;
clrscr();
printf("\n\nHow many people?(0-100):"); //输入需要输入信息的职工人数 scanf("%d",&p);
if(p>=0&&p<=100) //输入职工的信息
{
printf("\n\n");
printf("Please input data:\n");
printf("\n");
f1();
for(i=0;i<p;i++)
{
input(i);
worker[i].sum=worker[i].jibengongzi+worker[i].zhiwugongzi
+worker[i].jintie-worker[i].yiliaobaoxian-worker[i].gongjijin; //计算职工的总工资
worker[i].qiansan=worker[i].jibengongzi+worker[i].zhiwugongzi+worker[i].jintie; //职工前三项工资(基本工资、职务工资、津贴)之和
}
}
else
Input(); //如果输入的职工人数超过100,返回输入函数重新输入 save(p); //保存输入的职工信息
select(); //选择显示信息或返回到菜单
}
void Modify() //修改函数
{
int i,j=-1,d,k,t,n;char m[20];
FILE *fp; //定义一个文件指针
system("cls"); //清屏
n=P();
printf("\n\n");
printf("Choose the way you want to modify:\n"); //选择通过何种方式修改信息 printf("\n\n"); //选择方式的界面
printf("\t\t****************************************\n");
printf("\t\t* *\n"); printf("\t\t* 1.By name to modify *\n"); printf("\t\t* *\n"); printf("\t\t* 2.By number to modify *\n");
printf("\t\t* *\n");
printf("\t\t****************************************\n");
printf("\ninput your selection:");
scanf("%d",&d);
if(d!=1&&d!=2)
{
printf("\ninput error! Press any key to continue.");
getchar();
Modify(); //选择的数字错误,返回修改函数重新选择
}
else if(d==1)
{
do
{
printf("\nPlease input the name:"); //输入需要修改职工的姓名 scanf("%s",m);
for(i=0;i<n;i++)
if(strcmp(m,worker[i].name)==0)
j=i;
if(j==-1)
printf("\nNot find!Please input again!\n"); //没有找到该职工,重新输入 }
while(j==-1);
}
else
{
do
{
printf("\nPlease input the num:"); //输入需要修改职工的工号 scanf("%d",&k);
for(i=0;i<n;i++)
if(k==worker[i].num)
j=i;
if(j==-1)
printf("\nNot find!Please again!\n"); //没有找到该职工,重新输入 }
while(j==-1);
}
printf("\nWhat do you want to modify?\n\n"); //需要修改信息的界面 printf("\t\t**************************************\n");
printf("\t\t* *\n"); printf("\t\t* 1.name 2.number *\n"); printf("\t\t* *\n"); printf("\t\t* 3.jibengongzi 4.zhiwugongzi *\n");
printf("\t\t* *\n");
printf("\t\t* 5.jintie 6.yiliaobaoxian *\n");
printf("\t\t* *\n");
printf("\t\t* 7.gongjijin *\n");
printf("\t\t* *\n");
printf("\t\t**************************************\n");
printf("\nPlease input your selection:"); //选择需要修改的信息
scanf("%d",&t);
switch(t) //通过选择的数字,实现修改该信息
{
case 1:printf("\nbefore modify:%s",worker[j].name);
printf("\nchange to:");
scanf("%s",worker[j].name);
printf("\nafter modify:%s",worker[j].name);break;
case 2:printf("\nbefore modify:%d",worker[j].num);
printf("\nchange to:");
scanf("%d",&worker[j].num);
printf("\nafter modify:%d",worker[j].num);break;
case 3:printf("\nbefore modify:%d",worker[j].jibengongzi);
printf("\nchange to:");
scanf("%d",&worker[j].jibengongzi);
printf("\nafter modify:%d",worker[j].jibengongzi);break; case 4:printf("\nbefore modify:%d",worker[j].zhiwugongzi);
printf("\nchange to:");
scanf("%d",&worker[j].zhiwugongzi);
printf("\nafter modify:%d",worker[j].zhiwugongzi);break; case 5:printf("\nbefore modify:%d",worker[j].jintie);
printf("\nchange to:");
scanf("%d",&worker[j].jintie);
printf("\nafter modify:%d",worker[j].jintie);break;
case 6:printf("\nbefore modify:%d",worker[j].yiliaobaoxian);
printf("\nchange to:");
scanf("%d",&worker[j].yiliaobaoxian);
printf("\nafter modify:%d",worker[j].yiliaobaoxian);break; case 7:printf("\nbefore modify:%d",worker[j].gongjijin);
printf("\nchange to:");
scanf("%d",&worker[j].gongjijin);
printf("\nafter modify:%d",worker[j].gongjijin);break;
default:printf("Error!choice again!!\n");break;
}
getchar();
printf("\n");
f2();
worker[j].sum=worker[j].jibengongzi+worker[j].zhiwugongzi+worker[j].jintie -worker[j].yiliaobaoxian-worker[j].gongjijin; //职工的总工资 output(j);
printf("\nSave it?\n\n1.Yes 2.No\n"); //询问是否保存修改后的信息 scanf("%d",&i);
if(i==1)
save(n); //保存修改后的信息
printf("\nPress any key to back!"); //返回到菜单
getchar();
menu();
}
void Search() //查找函数
{
int i,j=-1,k,d,n;char m[20];
n=P();
system("cls"); //清屏
printf("Choose the way you want to search:\n"); //选择通过何种方式查找信息
职工工资管理系统课程设计报告67_工资管理系统课程设计
printf("\n\n"); //选择方式的界面
printf("\t\t****************************************\n"); printf("\t\t* *\n"); printf("\t\t* 1.By name to search *\n"); printf("\t\t* *\n");
printf("\t\t* 2.By number to search *\n");
printf("\t\t* *\n");
printf("\t\t****************************************\n");
printf("\n\n");
printf("Please input your selection:"); //选择查找的方式
scanf("%d",&d);
if(d==2)
{
do
{
printf("\nPlease input the number:"); //输入需要查找的职工工号 scanf("%d",&k);
for(i=0;i<n;i++)
{
if(k==worker[i].num)
j=i;
}
if(j==-1)
printf("Not find!Please input again!\n"); //没有找到该职工,重新输入 }
while(j==-1);
printf("\n");
f2();
output(j); //输出信息
}
else if(d==1)
{
do
{
printf("\nPlease input the name:"); //输入需要查找的职工姓名 scanf("%s",m);
for(i=0;i<n;i++)
if(strcmp(m,worker[i].name)==0)
j=i;
if(j==-1)
printf("Not find!Please input again!\n"); //没有找到该职工,重新输入 }
while(j==-1);
printf("\n");
f2();
output(j); //输出信息
}
if(d!=1&&d!=2)
{
printf("\nInput error! Press any key to continue."); //输入错误,按enter键继续 getchar();
Search(); //返回到查找函数
}
select(); //选择显示信息或返回到菜单
}
void Add() //添加函数
{
int i,k,m,n;
FILE *fp; //定义一个文件指针
system("cls"); //清屏
n=P();
printf("\n\nHow many people do you want to add:"); //输入需要添加的职工人数 scanf("%d",&m);
k=m+n;
if(k<=100)
{
printf("\n\nPlease input their information:\n\n"); //输入添加的职工信息 f1();
for(i=n;i<k;i++)
{
input(i);
worker[i].sum=worker[i].jibengongzi+worker[i].zhiwugongzi+worker[i].jintie
-worker[i].yiliaobaoxian-worker[i].gongjijin; //职工的总工资
}
if((fp=fopen("D:\\zggz.txt","ab"))==NULL) //如果文件为空,则不能打开文件 {
printf("\nCan not open file.\n"); //不能打开文件
getchar();
menu(); //返回到菜单
} for(i=n;i<k;i++) if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1) //判断是否写入了数 printf("file write error.\n"); //文件写入错误
fclose(fp); //关闭文件
select(); //选择显示信息或返回到菜单
}
Add(); //返回到添加函数
}
void Delete() //删除函数
{
int i,j=-1,d,k,t,n;char m[20];
FILE *fp; //定义一个文件指针
system("cls"); //清屏
n=P();
fp=fopen("D:\\zggz.txt","rb"); //打开只读文件
printf("\n\n");
printf("Choose the way you want to delete:\n"); //选择通过何种方式删除信息 printf("\n\n"); //删除函数的界面
printf("\t\t****************************************\n");
printf("\t\t* *\n");
printf("\t\t* 1.By name to delete *\n");
printf("\t\t* *\n");
printf("\t\t* 2.By number to delete *\n");
printf("\t\t* *\n");
printf("\t\t****************************************\n");
printf("\ninput your selection:"); //选择删除的方式
scanf("%d",&d);
if(d!=1&&d!=2)
{
printf("\ninput error! Press any key to continue."); //输入错误,按enter键继续 getchar();
Delete(); //返回到删除函数
}
else if(d==1)
{
do
{
printf("\nPlease input the name:"); //输入需要删除的职工姓名
scanf("%s",m);
for(i=0;i<n;i++)
if(strcmp(m,worker[i].name)==0)
j=i;
if(j==-1)
printf("\nNot find!Please again!\n"); //没有找到该职工,重新输入 }
while(j==-1);
}
else
do
{
printf("\nPlease input the num:"); //输入需要删除的职工工号
scanf("%d",&k);
for(i=0;i<n;i++)
if(k==worker[i].num)
j=i;
if(j==-1)
printf("\nNot find!Please again!\n"); //没有找到该职工,重新输入 }
while(j==-1);
}
printf("\n");
f2();
for(i=j;i<n-1;i++)
worker[i]=worker[i+1]; //删除信息后,将后面的职工信息按原来的顺序补充 for(i=0;i<n-1;i++)
output(i);
printf("Save it?\n\n1.Yes 2.No\n"); //询问是否保存删除后的职工信息
scanf("%d",&i);
if(i==1)
save(n-1); //保存删除后的职工信息
printf("\nPress any key to back!"); //按enter键继续
getchar();
menu(); //返回到菜单
}
void Show() //显示函数
{
int i,p,a=0,b=0,c=0,j=0,k=0,l=0,m=0,n=0;
p=P();
system("cls"); //清屏
f2();
for(i=0;i<p;i++)
output(i);
printf("\nnaverage salary:\n");
for(i=0;i<p;i++) //各项工资的总和
{
j+=worker[i].jibengongzi;
k+=worker[i].zhiwugongzi;
l+=worker[i].jintie;
m+=worker[i].yiliaobaoxian;
n+=worker[i].gongjijin;
printf("%13d %11d %12d %7d %15d",j/p,k/p,l/p,m/p,n/p);
printf("\n(qian san xiang)renshu baifenbi\n");
for(i=0;i<p;i++) //统计前三项工资在各个范围内的人数
{
if(worker[i].qiansan>3000)
a++;
else if(worker[i].qiansan>=2000 && worker[i].qiansan<=3000) b++;
else if(worker[i].qiansan>=1000 && worker[i].qiansan<=2000) c++;
}
//显示前三项工资在各个范围内的人数及所占人数的百分比
printf(" over 3000:%-7d%6d%%\n",a,(a*100/p));
printf(" 2000~3000:%-7d%6d%%\n",b,(b*100/p));
printf(" 1000~2000:%-7d%6d%%\n",c,(c*100/p));
}
void Exit() //退出函数
{
int i,p,a=0,b=0,c=0,j=0,k=0,l=0,m=0,n=0;
p=P();
system("cls"); //清屏
f2();
for(i=0;i<p;i++)
output(i);
printf("\nnaverage salary:\n");
for(i=0;i<p;i++) //各项工资的总和
{
j+=worker[i].jibengongzi;
k+=worker[i].zhiwugongzi;
l+=worker[i].jintie;
m+=worker[i].yiliaobaoxian;
n+=worker[i].gongjijin;
}
printf("%13d %11d %12d %7d %15d",j/p,k/p,l/p,m/p,n/p);
printf("\n(qian san xiang)renshu baifenbi\n");
for(i=0;i<p;i++) //统计前三项工资在各个范围内的人数 {
if(worker[i].qiansan>3000)
printf("\n"); printf("Press any key to back."); getchar(); menu(); //返回到菜单
职工工资管理系统课程设计报告67_工资管理系统课程设计
a++;
else if(worker[i].qiansan>=2000 && worker[i].qiansan<=3000)
b++;
else if(worker[i].qiansan>=1000 && worker[i].qiansan<=2000)
c++;
}
//显示前三项工资在各个范围内的人数及所占人数的百分比
printf(" over 3000:%-7d%6d%%\n",a,(a*100/p));
printf(" 2000~3000:%-7d%6d%%\n",b,(b*100/p));
printf(" 1000~2000:%-7d%6d%%\n",c,(c*100/p));
printf("\n");
getchar();
system("cls"); //清屏
printf("\n\n\n\n\n\n\n\n"); //退出系统的界面
printf("\t***********************************************************\n"); printf("\t ** **\n"); printf("\t ** Thank you for the use of staff wage management system! **\n"); printf("\t ** **\n"); printf("\t ** **\n"); printf("\t ** Good-bye! **\n"); printf("\t ** **\n"); printf("\t***********************************************************\n"); printf("\t\t\n\n");
getchar();
}
f1()
{
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin\n\n");
}
f2()
{
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
}
input(int i) //将输入的信息保存到结构体中
{
scanf("%d %s %d %d %d %d %d",&worker[i].num,worker[i].name,
&worker[i].jibengongzi,&worker[i].zhiwugongzi,&worker[i].jintie,
&worker[i].yiliaobaoxian,&worker[i].gongjijin);
}
output(int i) //输出信息
{
printf("%-3d%-5s %-12d %-12d %-8d %-14d %-10d %-7d\n\n",worker[i].num,
worker[i].name,worker[i].jibengongzi,worker[i].zhiwugongzi,
worker[i].jintie,worker[i].yiliaobaoxian,worker[i].gongjijin,worker[i].sum); }
select() //选择函数
{
int i;
printf("\n\n");
printf("\t\t\t* Successful! *\n");
printf("\n\n");
printf("What do you want to do now?\n\n1.Show all data 2.Back\n"); //选择显示信息或返回
scanf("%d",&i);
if(i==1)
Show(); //返回到显示函数
else if(i==2)
menu(); //返回到菜单
}
save(int n) //向文件中输入数据 {
FILE *fp; //定义一个文件指针
int i;
if((fp=fopen("D:\\zggz.txt","wb"))==NULL) //判断打开的写入文件是否为空 {
printf("\nCan not open file.\n");
return NULL;
}
for(i=0;i<n;i++)
if(worker[i].num!=0)
if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1) //判断是否写入了数
printf("file write error!\n"); //写入文件错误
fclose(fp); //关闭文件
}
P() {
FILE *fp; //定义一个文件指针
int i;
if((fp=fopen("D:\\zggz.txt","rb"))==NULL) //判断打开的只读文件是否为空
{
printf("\nCan not open file.\n");
return NULL;
}
for(i=0;!feof(fp);i++)
fread(&worker[i],sizeof(struct worker),1,fp); //读取文件
fclose(fp); //关闭文件
return (i-1);
}
四、调试分析
1、使用getchar()可以使字符一个个地存入缓冲区。
2、在删除、修改、添加函数中save(保存)函数,可以有针对性地保存需要保
存的文件。
3、使用input(输入)和output(输出)的子函数,可以避免多次写入信息
的麻烦。
4、P()函数在保存删除、修改后的人数中有很大的作用,在以后的调用保
存的人数中起到了很大的作用
5、用数字代替需要选择的选项,避免了输入字符的麻烦。
6、该程序使用的是结构体,没有用到链表,所以在删除数据后需要将后面
的数据放到前面,故将第n+1个职工的信息赋给第n个职工。
五、用户手册
1、在进入系统后显示菜单。有输入函数、修改函数、查找函数、添加函数、
删除函数、显示函数、退出函数可供选择。用户可以依次用1至7,七个数字选择需要进行的操作(说明:如果用户第一次进入该系统,或以前进入系统没有保存数据,需要选择1即选择输入函数输入数据)。
2、在删除、修改、添加信息完成后会询问用户是否保存当前的信息,用户
可根据自己的需要选择是否保存信息。
3、在几个函数最后会询问用户显示当前的信息或是返回到菜单,用户可以
自己的需要选择。
4、用户在选择时需注意各个数字代表的字符。
5、用户在输入职工的人数后点击enter键,如果依然停在当前页面,需注
意所输入的总职工人数是否超过了总人数N(该程序中N定义为100)。
6、注:职工工号为整型,不是字符型。
六、测试数据
菜单界面:
选择1(输入):
返回菜单,选择2(修改):
职工工资管理系统课程设计报告67_工资管理系统课程设计
返回菜单,选择3(查找):
返回菜单,选择4(添加):
返回菜单,选择5(删除):
返回菜单,选择6(显示):
返回菜单,选择7(退出):
显示保存的数据:
退出系统的界面:
七、附录
源程序
#include "stdio.h"
#define N 100
#include "string.h"
struct worker
{
int num;
char name[20];
int jibengongzi;
int zhiwugongzi;
int jintie;
int yiliaobaoxian;
int gongjijin;
int qiansan;
int sum;
} worker[N];
void menu();
void Input();
void Modify();
void Search();
void Add();
void Delete();
void Show();
void Exit();
int main()
{
system("cls");
menu();
}
void menu()
{
int n;
system("cls");
printf("\n\n\n");
printf("\t\t***********************************************\n");
printf("\t\t** **\n");
printf("\t\t** If you were the first to enter the system **\n");
printf("\t\t** please select Input! **\n");
printf("\t\t** **\n");
printf("\t\t** printf("\t\t** printf("\t\t** printf("\t\t** 1-------Input **\n"); 2-------Modify **\n"); 3-------Search **\n"); 4-------Add **\n");
printf("\t\t** 5-------Delete **\n");
printf("\t\t** 6-------Show **\n");
printf("\t\t** 7-------Exit **\n");
printf("\t\t** **\n");
printf("\t\t***********************************************\n");
printf("\t\t\n");
printf("\n\n");
printf("\t\tInput your choose(1-7):");
scanf("%d",&n);
if(n>=1&&n<=7)
{
switch(n)
{
case 1:Input();break;
case 2:Modify();break;
case 3:Search();break;
case 4:Add();break;
case 5:Delete();break;
case 6:Show();break;
case 7:Exit();break;
}
}
else
menu();
}
void Input()
{
int i,p;
clrscr();
printf("\n\nHow many people?(0-100):");
scanf("%d",&p);
if(p>=0&&p<=N)
{
printf("\n\n");
printf("Please input data:\n");
printf("\n");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin\n\n");
for(i=0;i<p;i++)
{
input(i);
worker[i].sum=worker[i].jibengongzi+worker[i].zhiwugongzi
+worker[i].jintie-worker[i].yiliaobaoxian-worker[i].gongjijin;
worker[i].qiansan=worker[i].jibengongzi+worker[i].zhiwugongzi+worker[i].jintie; }
}
else
Input();
save(p);
select();
}
void Modify()
{
int i,j=-1,d,k,t,n;char m[20];
FILE *fp;
system("cls");
n=P();
printf("\n\n");
职工工资管理系统课程设计报告67_工资管理系统课程设计
printf("Choose the way you want to modify:\n");
printf("\n\n");
printf("\t\t****************************************\n");
printf("\t\t* *\n");
printf("\t\t* 1.By name to modify *\n");
printf("\t\t* *\n");
printf("\t\t* 2.By number to modify *\n");
printf("\t\t* *\n");
printf("\t\t****************************************\n");
printf("\ninput your selection:");
scanf("%d",&d);
if(d!=1&&d!=2)
{
printf("\ninput error! Press any key to continue.");
getchar();
Modify();
}
else if(d==1)
{
do
{
printf("\nPlease input the name:");
scanf("%s",m);
for(i=0;i<n;i++)
if(strcmp(m,worker[i].name)==0)
j=i;
if(j==-1)
printf("\nNot find!Please input again!\n");
}
while(j==-1);
}
else
{
do
{
printf("\nPlease input the num:");
scanf("%d",&k);
for(i=0;i<n;i++)
if(k==worker[i].num)
j=i;
if(j==-1)
printf("\nNot find!Please again!\n");
}
while(j==-1);
}
printf("\nWhat do you want to modify?\n\n");
printf("\t\t**************************************\n");
printf("\t\t* *\n");
printf("\t\t* 1.name 2.number *\n");
printf("\t\t* *\n");
printf("\t\t* 3.jibengongzi 4.zhiwugongzi *\n");
printf("\t\t* *\n");
printf("\t\t* 5.jintie 6.yiliaobaoxian *\n");
printf("\t\t* *\n");
printf("\t\t* 7.gongjijin *\n");
printf("\t\t* *\n");
printf("\t\t**************************************\n");
printf("\nPlease input your selection:");
scanf("%d",&t);
switch(t)
{
case 1:printf("\nbefore modify:%s",worker[j].name);
printf("\nchange to:");
scanf("%s",worker[j].name);
printf("\nafter modify:%s",worker[j].name);break;
case 2:printf("\nbefore modify:%d",worker[j].num);
printf("\nchange to:");
scanf("%d",&worker[j].num);
printf("\nafter modify:%d",worker[j].num);break;
case 3:printf("\nbefore modify:%d",worker[j].jibengongzi);
printf("\nchange to:");
scanf("%d",&worker[j].jibengongzi);
printf("\nafter modify:%d",worker[j].jibengongzi);break; case 4:printf("\nbefore modify:%d",worker[j].zhiwugongzi);
printf("\nchange to:");
scanf("%d",&worker[j].zhiwugongzi);
printf("\nafter modify:%d",worker[j].zhiwugongzi);break; case 5:printf("\nbefore modify:%d",worker[j].jintie);
printf("\nchange to:");
scanf("%d",&worker[j].jintie);
printf("\nafter modify:%d",worker[j].jintie);break;
case 6:printf("\nbefore modify:%d",worker[j].yiliaobaoxian);
printf("\nchange to:");
scanf("%d",&worker[j].yiliaobaoxian);
printf("\nafter modify:%d",worker[j].yiliaobaoxian);break; case 7:printf("\nbefore modify:%d",worker[j].gongjijin);
printf("\nchange to:");
scanf("%d",&worker[j].gongjijin);
printf("\nafter modify:%d",worker[j].gongjijin);break;
default:printf("Error!choice again!!\n");break;
}
getchar();
printf("\n");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
worker[j].sum=worker[j].jibengongzi+worker[j].zhiwugongzi+worker[j].jintie
-worker[j].yiliaobaoxian-worker[j].gongjijin;
output(j);
printf("\nSave it?\n\n1.Yes 2.No\n");
scanf("%d",&i);
if(i==1)
save(n);
printf("\nPress any key to back!");
getchar();
menu();
}
void Search()
{
int i,j=-1,k,d,n;char m[20];
n=P();
system("cls");
printf("Choose the way you want to search:\n");
printf("\n\n");
printf("\t\t****************************************\n");
printf("\t\t* *\n");
printf("\t\t* 1.By name to search *\n");
printf("\t\t* *\n");
printf("\t\t* 2.By number to search *\n");
printf("\t\t* *\n");
printf("\t\t****************************************\n");
printf("\n\n");
printf("Please input your selection:");
scanf("%d",&d);
if(d==2)
{
do
printf("\nPlease input the number:");
scanf("%d",&k);
for(i=0;i<n;i++)
{
if(k==worker[i].num)
j=i;
}
if(j==-1)
printf("Not find!Please input again!\n");
}
while(j==-1);
printf("\n");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
output(j);
}
else if(d==1)
{
do
{
printf("\nPlease input the name:");
scanf("%s",m);
for(i=0;i<n;i++)
if(strcmp(m,worker[i].name)==0)
j=i;
if(j==-1)
printf("Not find!Please input again!\n");
}
while(j==-1);
printf("\n");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
output(j);
}
if(d!=1&&d!=2)
{
printf("\nInput error! Press any key to continue.");
getchar();
Search();
}
select();
}
{
int i,k,m,n;
FILE *fp;
system("cls");
n=P();
printf("\n\nHow many people do you want to add:");
scanf("%d",&m);
k=m+n;
if(k<=N)
{
printf("\n\nPlease input their information:\n\n");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin\n\n");
for(i=n;i<k;i++)
{
input(i);
worker[i].sum=worker[i].jibengongzi+worker[i].zhiwugongzi+worker[i].jintie -worker[i].yiliaobaoxian-worker[i].gongjijin; }
if((fp=fopen("D:\\zggz.txt","ab"))==NULL)
{
printf("\nCan not open file.\n");
getchar();
menu();
}
for(i=n;i<k;i++)
if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)
printf("file write error.\n");
fclose(fp);
select();
}
else
Add();
}
void Delete()
{
int i,j=-1,d,k,t,n;char m[20];
FILE *fp;
system("cls");
n=P();
fp=fopen("D:\\zggz.txt","rb");
职工工资管理系统课程设计报告67_工资管理系统课程设计
printf("\n\n");
printf("Choose the way you want to delete:\n");
printf("\n\n");
printf("\t\t****************************************\n");
printf("\t\t* *\n");
printf("\t\t* 1.By name to delete *\n");
printf("\t\t* *\n");
printf("\t\t* 2.By number to delete *\n");
printf("\t\t* *\n");
printf("\t\t****************************************\n");
printf("\ninput your selection:");
scanf("%d",&d);
if(d!=1&&d!=2)
{
printf("\ninput error! Press any key to continue.");
getchar();
Delete();
}
else if(d==1)
{
do
{
printf("\nPlease input the name:");
scanf("%s",m);
for(i=0;i<n;i++)
if(strcmp(m,worker[i].name)==0)
j=i;
if(j==-1)
printf("\nNot find!Please again!\n");
}
while(j==-1);
}
else
{
do
{
printf("\nPlease input the num:");
scanf("%d",&k);
for(i=0;i<n;i++)
if(k==worker[i].num)
j=i;
if(j==-1)
printf("\nNot find!Please again!\n");
}
while(j==-1);
}
printf("\n");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
for(i=j;i<n-1;i++)
worker[i]=worker[i+1];
for(i=0;i<n-1;i++)
output(i);
printf("Save it?\n\n1.Yes 2.No\n");
scanf("%d",&i);
if(i==1)
save(n-1);
printf("\nPress any key to back!");
getchar();
menu();
}
void Show()
{
int i,p,a=0,b=0,c=0,j=0,k=0,l=0,m=0,n=0;
p=P();
system("cls");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
for(i=0;i<p;i++)
output(i);
printf("\nnaverage salary:\n");
for(i=0;i<p;i++)
{
j+=worker[i].jibengongzi;
k+=worker[i].zhiwugongzi;
l+=worker[i].jintie;
m+=worker[i].yiliaobaoxian;
n+=worker[i].gongjijin;
}
printf("%13d %11d %12d %7d %15d",j/p,k/p,l/p,m/p,n/p);
printf("\n(qian san xiang)renshu baifenbi\n");
for(i=0;i<p;i++)
{
if(worker[i].qiansan>3000)
a++;
else if(worker[i].qiansan>=2000 && worker[i].qiansan<=3000)
b++;
else if(worker[i].qiansan>=1000 && worker[i].qiansan<=2000)
c++;
}
printf(" over 3000:%-7d%6d%%\n",a,(a*100/p));
printf(" 2000~3000:%-7d%6d%%\n",b,(b*100/p));
printf(" 1000~2000:%-7d%6d%%\n",c,(c*100/p));
printf("\n");
printf("Press any key to back.");
getchar();
menu();
}
void Exit()
{
int i,p,a=0,b=0,c=0,j=0,k=0,l=0,m=0,n=0;
p=P();
system("cls");
printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n");
for(i=0;i<p;i++)
output(i);
printf("\nnaverage salary:\n");
for(i=0;i<p;i++)
{
j+=worker[i].jibengongzi;
k+=worker[i].zhiwugongzi;
l+=worker[i].jintie;
m+=worker[i].yiliaobaoxian;
n+=worker[i].gongjijin;
}
printf("%13d %11d %12d %7d %15d",j/p,k/p,l/p,m/p,n/p);
printf("\n(qian san xiang)renshu baifenbi\n");
for(i=0;i<p;i++)
{
if(worker[i].qiansan>3000)
a++;
else if(worker[i].qiansan>=2000 && worker[i].qiansan<=3000)
b++;
else if(worker[i].qiansan>=1000 && worker[i].qiansan<=2000)
c++;
}
printf(" over 3000:%-7d%6d%%\n",a,(a*100/p));
printf(" 2000~3000:%-7d%6d%%\n",b,(b*100/p));
printf(" 1000~2000:%-7d%6d%%\n",c,(c*100/p));
printf("\n");
getchar();
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf("\t***********************************************************\n"); printf("\t ** **\n"); printf("\t ** Thank you for the use of staff wage management system! **\n"); printf("\t ** **\n"); printf("\t ** **\n"); printf("\t ** Good-bye! **\n"); printf("\t ** **\n"); printf("\t***********************************************************\n");
printf("\t\t\n\n");
getchar();
}
input(int i)
{
scanf("%d %s %d %d %d %d %d",&worker[i].num,worker[i].name,
&worker[i].jibengongzi,&worker[i].zhiwugongzi,&worker[i].jintie, &worker[i].yiliaobaoxian,&worker[i].gongjijin);
}
output(int i)
{
printf("%-3d%-5s %-12d %-12d %-8d %-14d %-10d %-7d\n\n",worker[i].num, worker[i].name,worker[i].jibengongzi,worker[i].zhiwugongzi,
worker[i].jintie,worker[i].yiliaobaoxian,worker[i].gongjijin,worker[i].sum); }
select()
{
int i;
printf("\n\n");
printf("\t\t\t* Successful! *\n");
printf("\n\n");
printf("What do you want to do now?\n\n1.Show all data 2.Back\n"); scanf("%d",&i);
if(i==1)
Show();
else if(i==2)
menu();
}
save(int n)
{
FILE *fp;
int i;
if((fp=fopen("D:\\zggz.txt","wb"))==NULL) {
printf("\nCan not open file.\n");
return NULL;
}
for(i=0;i<n;i++)
if(worker[i].num!=0)
if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1) printf("file write error!\n");
fclose(fp);
}
P()
{
FILE *fp;
int i;
if((fp=fopen("D:\\zggz.txt","rb"))==NULL) {
printf("\nCan not open file.\n");
return NULL;
}
for(i=0;!feof(fp);i++)
fread(&worker[i],sizeof(struct worker),1,fp); fclose(fp);
return (i-1);
}
四 : 软件工程课程设计——大学工资管理系统
软 件 学 院
课程设计报告书
课程名称 设计题目 大学工资管理系统的分析与设计 专业班级 学 号 姓 名 指导教师
年 月
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
1
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
2
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
3
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
4
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
5
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
6
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
7
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
8
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
9
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
10
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
11
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
12
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
13
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
14
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
15
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
16
工资管理系统课程设计 软件工程课程设计——大学工资管理系统
17
61阅读提醒您本文地址:
五 : 软件工程课程设计-超市管理系统
石家庄信息职业学院
课程设计(实训)报告
系 部 _ 信息工程系__ 专 业 _____________ 班 级 学 号 ____________
超市管理系统 姓 名 _______________课 题 _____________
指导教师 报告成绩 _ _
日 期:2011年 12 月 28 日
超市管理软件 软件工程课程设计-超市管理系统
摘 要
随着小超市规模的发展不断扩大,商品数量急剧增加,有关商品的各种信息量也成倍增长。[www.61k.com)超市时时刻刻都需要对商品各种信息进行统计分析。而大型的超市管理系统功能过于强大而造成操作繁琐降低了小超市的工作效率。
超市管理系统是市场上最流行的超市上常用的系统之一,它主要包含以下几个模块:系统权限的设定、原始数据录入、数据的汇总及查询等。从而,实现对进货、销售及员工信息等实现全面、动态、及时的管理。
随着现代科学技术的迅猛发展,计算机技术已经渗透到哥哥领域,成为各行业必不可少的工具,特别是Internet技术的推广和信息高速公路的建立,使IT产业在市场竞争中越发显示出其独特的优势,步入信息化时代,有巨大的数据信息等待加工处理和传输,这使得对书数据库的进一步开发和利用显得尤为迫切。
作为国内市场的一些中小型超市,它们在信息化过程中的步伐要落后于大中型超市,而对于这些企业的资源管理,信息的存储和处理也显得迫切需要,要适应市场竞争,就需要有高效的处理方式和管理方法,因此加快超市的信息化进程是必可少的。
本文系统的分析了软件开发的背景以过程;首先介绍了软件的开发环境,其次介绍了本软件的详细设计过程:数据库的设计、各个模块的设计和实现,以及具体界面的设计和功能。 关键词:超市 管理信息系统
1
超市管理软件 软件工程课程设计-超市管理系统
目 录
一、项目开发的准备工作···········································1
1.1系统开发目的············································1
1.2数据库设计··············································1
1.3背景说明·················································1
1.4项目确立·················································1
1.5定义·····················································1
1.6可行性研究··············································1
二、系统分析过程·················································3
2.1用户需求分析···········································3
2.2系统功能分析··········································3
三、系统设计过程··················································6
3.1系统模型·················································6 3.2模块子系统结构···········································8
四、软件测试······················································10
4.1测试过程分析············································10
4.2测试方案·················································10
4.3测试小结·················································11
五、总结···························································12
六、参考文献······················································12 2
超市管理软件 软件工程课程设计-超市管理系统
前言
超市需要处理大量的库存信息,还要时刻更新产品的销售信息,不断添加商品信息。[www.61k.com]面对不同种类的信息,需要合理的数据库结构来保存数据信息,需要有效的程序结构支持各种数据操作的执行。商店自动化的产品管理在欧美等国家早已经实现,也是零售业管理的基础。它最主要的特点是能够实时的和准确的控制店内的销售情况。如果可以能够实时掌握销售流程及销售情况,则可以有效地加速商品的周转率并提高服务质量,而且可以减少产品售价不符等所产生的问题。顾客的消费要求的是希望在超市购物中能基本上都能购得所需的商品,并且还要既保证商品质量还要享受优质,方便的服务。
超市形态具有种种优点,但在目前状况下,它仍存在零售业企业所共有的落后的一面,如:不能有效地管理每种商品,收款结算速度慢,容易出现营业差错,不宜进行商品调价,盘点效率低等,而且在超市日常管理中,商品的进、销、存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足。苏辙超市形态的高速发展,其经营管理也变得愈加复杂,日常所需要处理的数据量也逐渐增大,商业运转的中间环节也越来越多,原始的人工管理已无法应对这复杂的市场。为此,在选题过程中,我选择了超市管理系统设计题目,依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,改善了员工的工作条件,减轻了劳动强度,并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。
61阅读提醒您本文地址:
3
超市管理软件 软件工程课程设计-超市管理系统
一 项目开发的准备工作
1.1.系统开发目的
1.大大提高超市的运作效率;
2.通过全面的信息采集和处理,辅助提高超市的决策水平;
3.使用本系统,可以迅速提升超市的管理水平,为降低经营成本, 提高效益,增强超市扩张力, 提供有效的技术保障。[www.61k.com)
1.2.背景说明
21世纪,超市的竞争也进入到了一个全新的领域,竞争已不再是规模的竞争,而是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是超市业的竞争核心。零售领域目前呈多元发展趋势,多种业态:超市、仓储店、便利店、特许加盟店、专卖店、货仓等相互并存。如何在激烈的竞争中扩大销售额、降低经营成本、扩大经营规模,成为超市营业者努力追求的目标。
1.3.项目确立
针对超市的特点,为了帮助超市解决现在面临的问题,提高小型超市的竞争力,我们将开发以下系统:前台POS销售系统、后台管理系统,其中这两个子系统又包含其它一些子功能。
1.4.应用范围
本系统适应于各种超市。
1.5.定义
1 商品条形码:每种商品具有唯一的条形码,对于某些价格一样的商品,可以使用自定义条形码。
2 交易清单:包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号。
3 商品积压:在一定时期内,远无法完成销售计划的商品会造成积压。
4 促销:在一定时期内,某些商品会按低于原价的促销价格销售。
库存告警提示:当商品的库存数量低于库存报警数量时发出提示。
5 盘点:计算出库存、销售额、盈利等经营指标。
1.6.可行性研究
1.管理可行性分析
超市的经营者大多具备电脑基本操作知识,对于必要的专业操作经短期培训即可;管理基础工作和各项管理制度比较健全,执行严格,原始数据采集完整,保存良好。
2.经济可行性分析
超市管理系统的投入,能够提高工作效率,减少工作人员,从而减少人力资本的投入,根据核算,系统投入三个月后,就能够基本收回开发系统的投资,从经济角度来说,本系统开发完全必要。
3.技术可行性分析
(1).硬件:电脑一台
(2).软件:操作系统:中文Windows xp
开发系统:Microsoft Visual Stutio 2005
安装SQL Server 2000的服务器版本
系统本身对硬件和软件的要求都不高且系统兼容性很强,平台的移植性也很好,因此无论在系统的硬件及软件上都满足开发的要求。
1
超市管理软件 软件工程课程设计-超市管理系统
(3).本系统涉及到的技术因素:
● 管理系统的开发方法。[www.61k.com]使用面向对象开发方法开发软件系统
● 网络和通信技术。开发小组有基于C/S开发的经验
● C/S机构规划和技术设计。开发小组有应用数据库开发经验
(4).运行上的可行性:
● 操作简单:简单的操作规则使操作人员能轻松掌握。
● 查询方便:用户可设定任意条件和任意的查询项目进行检索。
● 统计灵活:任意条件下任意项目的产品入库时间、数量等的统计及查询项目均可进行交叉统计。
4.系统初步ER图
5.可行性研究结论
本小组拟开发的管理信息系统操作方便灵活,便于学习,因此,该系统具有可行性。
通过经济、技术、和社会等方面的可行性研究,可以确定本系统的开发完全必要,而且是可行的,可以立项开发。
2
超市管理软件 软件工程课程设计-超市管理系统
二、系统分析过程
2.1用户需求分析
超市的进销存管理信息系统,首先必须具备的功能是记录仓库存货、销售以及进货情况,通过该系统了解超市进货渠道、商品单价、数量,库存商品的种类、数量,销售商品种类、价格、数量,以便管理员根据以上信息作出经营管理决策。[www.61k.com)
在性能方面要求系统核算准确,使实存商品、销售商品与所记帐目一致,能够被超市长期有效使用。
数据主要来自于入库单、发票,超市销售在营业期间内一直发生,数据也就一直变化。销售商品后开出发票,并且要显示商品价格数额。
在当天汇总时修改相应文件,注重的是总额、总数量。为减少月末工作量,日常中要对报表数据逐步统计核算。
超市数据资料有些属内部资料,不能为外人所知,系统须有保密措施,设置密码。
查看资料需输入正确密码,销售人员销售货物需输入代号才能打开收银柜。万一泄露密码,应设修改密码的程序,同时密码不能过于简单
2.2系统功能分析
1. 零售前台(POS)管理系统,本系统必须具有以下功能:
商品录入:根据超巿业务特点制定相关功能,可以通过输入唯一编号、扫描条形码、商品名称等来实现精确或模糊的商品扫描录入。该扫描录入方法可以充分保证各种电脑操作水平层次的人员均能准确快速地进行商品扫描录入。
收银业务:通过扫描条形码或者直接输入商品名称(对于同类多件商品采用一次录入加数量的方式)自动计算本次交易的总金额。在顾客付款后,自动计算找零,同时打印交易清单(包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号)。如果顾客是本店会员并持有本人会员卡,则在交易前先扫描会员卡,并对所购物品全部实行95折优惠,并将所购物品的总金额累计到该会员的总消费金额中。 会员卡的有效期限为一年,满一年未续卡者,该会员卡将被注销。
安全性:OS登陆、退出、换班与操作锁定等权限验证保护;断电自动保护最大限度防止意外及恶意非法操作。
独立作业:有的断网收银即在网络服务器断开或网络不通的情况下,收银机仍能正常作业
2. 后台管理系统,本系统必须具备以下功能
进货管理: 根据销售情况及库存情况,自动制定进货计划(亦可手工制定修改),可以避免盲目进货造成商品积压。 按计划单有选择性地进行自动入库登记。 综合查询打印计划进货与入库记录及金额。
61阅读提醒您本文地址:
销售管理: 商品正常销售、促销与限量、限期及禁止销售控制。 综合查询各种销售明细记录、各地收银员收银记录以及交结账情况等。 按多种方式统计生成销售排行榜,灵活察看和打印商品销售日、月、年报表。
库存管理: 综合查询库存明细记录。 库存状态自动告警提示。如库存过剩、少货、缺货等。软件为您预警,避免库存商品积压损失和缺货。 库存自动盘点计算。
人员管理: 员工、会员、供货商、厂商等基本信息登记管理。 员工操作权限管理。 客户销售权限管理。
3
超市管理软件 软件工程课程设计-超市管理系统
3.系统结构 系统总体结构
4.流程图
前台管理系统
5.系统ER图
4
超市管理软件 软件工程课程设计-超市管理系统
系统ER图说明
商店中的所有用户(员工)可以销售多种商品,每种商品可由不同用户(工)销售,每个顾客可以购买多种商品,不同商品可由不同顾客购买;
每个供货商可以供应多种不同商品,每种商品可由多个供应商供应。[www.61k.com]
5
超市管理软件 软件工程课程设计-超市管理系统
三、系统设计过程
3.1系统模型:
户类型与职能
(1) 员工(营业员):
通过商品条形码扫描输入商品到购买清单 操作软件计算交易总金额
操作软件输出交易清单
对会员进行会员卡扫描以便打折
(2) 超市经理
操作软件录入商品,供货商,厂商 操作软件制定进货计划
查询打印计划进货与入库记录 操作软件控制商品销售与否
查询打印销售情况
操作软件生成销售排行榜
查询库存明细记录
根据软件发出的库存告警进行入货 操作软件进行盘点计算
(3) 总经理:
基本信息登记管理
员工操作权限管理
客户销售权限管理
零售前台(POS)管理系统用例视图 6
超市管理软件 软件工程课程设计-超市管理系统
打折
后台管理系统用例视图
删除VIP
客户销售权限管理提示
7
超市管理软件 软件工程课程设计-超市管理系统
3.2模块子系统结构:
(1). 商品录入
功能描述:商品录入子系统要求能快速录入商品,因此必须支持条形码扫描。[www.61k.com) (2). 收银业务
功能描述:收银业务子系统能计算交易总额,打印交易清单,并根据会员卡打折。 (3). 进货管理
功能描述:进货管理子系统可以根据库存自动指定进货计划,进货时自动等级以及提供查询和打印计划进货与入库记录的功能。
8
超市管理软件 软件工程课程设计-超市管理系统
(4). 销售管理
功能描述:销售管理子系统可以控制某商品是否允许销售,查询每种商品的销售情况并产生年、月、日报表,同时可以生成销售排行榜。(www.61k.com] (5). 库存管理
功能描述:库存管理子系统提供查询库存明细记录的基本功能,并根据库存的状态报警,以及自动盘点计算。
(6).人员管理
9
超市管理软件 软件工程课程设计-超市管理系统
功能描述:人员管理子系统提供基本信息登记管理,员工操作权限管理,客户权限管理
四、软件测试
软件开发过程一般需要经历这样几个主要的阶段:
1. 定义。(www.61k.com]明确软件开发的目标、软件的需求。
2. 计划。制定软件开发所涉及 的各种计划。
3. 实现。进行设计、编码、文档编写工作,完成所要求的开发的软件特性。
4. 稳定化。以测试和缺陷修复工作为主,确保将提交的软件具有良好的质量。
5. 部署。安装、提交开发完成的软件,建立可供用户使用的环境。
4.1测试过程分析:
输入:《项目实施计划书》
相关规范
测试文档
源代码、可执行代码
《需求跟踪矩阵》
活动介绍:构建测试环境,包括系统平台(软硬件平台)的安装、可执行代码或源代码的安装、系统基础数据的准备等。
在测试过程中,记录BUG信息,并及时向程序员提交BUG信息。收到BUG信息后进行源代码的修正,并记录处理结果后,返回进行回归测试。
在测试过程中,根据测试的功能,补充《需求跟踪矩阵》相应栏的内容。
61阅读提醒您本文地址:
若测试不通过,且涉及到修改设计阶段的问题,则依据《配置管理控制程序》中的有关变更控制来执行,直至测试通过。
测试结束,根据测试情况,填写《测试总结报告》。
输出:经测试之源代码
经测试之可执行代码
测试文档
BUG记录(可用BUG管理工具代替)
《测试总结报告》
修改后的《需求跟踪矩阵》
4.2测试方案
一.范围
本文档适用于超市管理系统软件的单元/集成测试。
1. 系统概述
2. 文档概述
10
超市管理软件 软件工程课程设计-超市管理系统
本文档用于对超市管理系统软件的测试工作阶段成果的描述。(www.61k.com]包括对软件测试的整体描述,软件测试的分类和级别,软件测试的过程描述,软件测试的结果等内容。
二.引用文档
《超市管理系统软件需求规格说明》
《超市管理系统软件设计说明》
《超市管理系统系统接口协议》
三.测试概述
1. 被测软件的基本概况
使用的编程语言:汇编语言
4.3测试小结
本次测试对超市管理系统软件进行了静态分析和动态测试。测试工作分为两个阶段。第一阶段进行了软件静态分析,软件测试人员和开发人员分别对软件V1.00版本的代码进行走读。在此基础上软件开发人员对代码走查中发现的问题进行了修改,做了代码变更并提交了新版本进行动态测试。
在测试过程中针对发现的软件缺陷进行了初步分析,并提交程序设计人员对原软件中可能存在的问题进行考查。在软件测试中首先根据软件测试的规范进行考核,将书写规范,注释等基础问题首先解决,其次考核软件测试中的问题是否存在设计上的逻辑缺陷,如果存在设计缺陷则应分析该缺陷的严重程度以及可能引发的故障。软件开发人员在以上基础上对软件的不足做出相应的修改,同时通过软件回归测试验证软件修改后能够得到的改善结果。
在动态测试阶段进行了单元测试和集成测试。此阶段发现的软件问题经软件测试人员修改,提交了新版本,软件测试人员对此版本的软件代码进行了回归测试,确认对前阶段发现的软件问题进行了修改。
a. 静态分析小结
静态测试采用人工代码走查的方式进行。参加代码走查的软件开发人员有:(略);参加代码走查的软件测试人员有:(略)。代码走查以代码审查会议的形式进行。静态分析过程中共进行了四次会议审查。静态测试阶段的主要工作内容是:
? 根据对软件汇编源代码的分析绘制详细的程序流程图和调用关系图; ? 对照软件汇编源代码和流程图进行程序逻辑分析、算法分析、结构分析和接口分析;
? 对软件汇编源代码进行编程规范化分析。
通过静态测试查找出软件的缺陷 个,其中
轻微的缺陷
中等的缺陷
11
超市管理软件 软件工程课程设计-超市管理系统
严重的缺陷
b. 动态测试小结
动态测试使用的测试工具为超市管理系统软件集成开发环境。[www.61k.com)
总共的测试用例数:全部由测试人员人工设计。
其中单元测试用例,集成测试用例。
发现的软件缺陷,都是在单元测试过程中发现的。集成测试阶段未发现新的软件缺陷。
动态测试中代码覆盖率:
代码行覆盖率
分支覆盖率
程序单元调用覆盖率
五、总结
和传统管理模式相比较,使用本系统,毫无疑问会大大提高超市的运作效率,辅助提高超市的决策水平,管理水平,为降低经营成本, 提高效益,减少差错,节省人力,减少顾客购物时间,增加客流量,提高顾客满意度,增强超市扩张能力, 提供有效的技术保障。
由于开发者能力有限,加上时间仓促,本系统难免会出现一些不足之处,例如:
? 本系统只适合小型超市使用,不能适合中大型超市使用;
? 超市管理系统涉及范围宽,要解决的问题多,功能复杂,实现困难,
但由于限于时间,本系统只能做出其中的一部分功能;
对于以上出现的问题,我们深表歉意,如发现还有其它问题,希望老师批评指正。
六、参考文献
《数据库原理及设计》 陶宏才编 清华大学出版社
《SQL Server 2000 实用教程》范立南编 清华大学出版社
《SQL Server 2000 编程员指南》李香敏编 北京希望电子出版社
《轻松搞定 SQL Server 2000 程序设计》Rebecca M.Riordan编
《软件工程规范》Watts S.Humphrey编 清华大学出版社
《软件工程理论与实践》 Shari Lawrence Pfleeger编 清华大学出版社
《软件需求分析》 Swapna Kishore编 机械工业出版社
《软件工程思想》 林锐编
12
61阅读提醒您本文地址:
本文标题:工资管理系统课程设计-软件工程课程设计 实验报告 房产管理系统61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1