明天进行学校的C语言答辩了,有问题想问大家,在线等
题目是职工薪金系统我编了一个程序~~可是点查找的时侯
职工列表总是闪一下 就没了 不知道怎么回事
代码入下,请大家看下,谢谢各位了
#include<stdio.h> /*标准输入输出函数库*/
#include<stdlib.h> /*标准库函数*/
#include<string.h> /*字符串函数*/
#define HEADER1 "------职工薪资管理系统--------- \n"
#define HEADER2 "| 职工号| 姓名 |基本工资| \n"
#define HEADER3 "|--------|-----------|--------| \n"
#define FORMAT "|%8s|%10s |%8.2f| \n"
#define DATA tp[i].num,tp[i].name,tp[i].jbgz
#define END "------------------------------- \n"
#define N 10
typedef struct employee /*定义与职工有关的数据结构*/
{
char num[10]; /*职工编号*/
char name[15]; /*姓名*/
float jbgz; /*基本工资*/
}ZGGZ;
void menu() /*主菜单*/
{
system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/
printf(" 职工薪酬系统 \n");
printf("********************菜单********************\n");
printf("* 1.查询记录 2.修改记录 *\n");
printf("* 3.删除记录 4.插入记录 *\n");
printf("* 5.排序记录 0.退出系统 *\n");
printf("********************************************\n");
}
void printheader() /*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void Display(ZGGZ tp[],int n) /*显示*/
{
int i=0;
printheader(); /*输出表格头部*/
while(i<n) /*逐条输出数组中存储的职工信息*/
{
printf(FORMAT,DATA);
i++;
printf(HEADER3);
}
}
void Qur(ZGGZ tp[],int n) /*查找记录*/
{
int i,flag=-1;
char find[10]; /*保存待查找姓名字符串*/
printf("请输入要查的职工号:\n"); /*提示信息*/
scanf("%s",find);
for(i=0;i<n;i++) /*循环*/
{
if(strcmp(find,tp[i].num)==0)
{ flag=i;break;}
}
if(flag!=-1) /*如果flag不等于-1输出*/
{
printheader();
printf(FORMAT,tp[flag].num,tp[flag].name,tp[flag].jbgz);
printf(END);
}
else
printf("没有找到符合要求的记录!");
}
void Modify(ZGGZ tp[],int n) /*修改记录*/
{
int i,flag=-1;
char find[10];
printf("请输入要修改的员工号:"); /*提示信息*/
scanf("%s",find);
for(i=0;i<n;i++)
{
if(strcmp(find,tp[i].num)==0)
{ flag=i;break;}
}
if(flag!=-1)
{
printheader();
printf(FORMAT,tp[flag].num,tp[flag].name,tp[flag].jbgz);
/*如成立,输出职工姓名,基本工资*/
scanf("%s%f",tp[flag].name,&tp[flag].jbgz); /*输入待职工姓名,基本工资*/
printf(FORMAT,tp[flag].num,tp[flag].name,tp[flag].jbgz);
/*输出待职工编号,职工姓名,基本工资*/
Display(tp,n);
}
else
printf("没有找到符合要求的记录!\n");
}
void Del(ZGGZ tp[],int n) /*删除记录*/
{
int i,flag=-1;
char find[10]; /*定义原有记录*/
char newnum[10]; /*定义要删除记录的编号*/
Display(tp,n);
printf("请输入要删除的职工号:\n"); /*提示信息*/
scanf("%s",find);
for(i=0;i<n-1;i++) /*删除该记录,实际后续记录前移*/
{
if(strcmp(find,tp[i].num)==0)
{ flag=i;break;}
}
if(flag!=-1)
for(i=flag+1;i<n;i++)
{
strcpy(tp[i-1].num,tp[i].num); /*将后一条记录的编号拷贝到前一条*/
strcpy(tp[i-1].name,tp[i].name); /*将后一条记录的姓名拷贝到前一条*/
tp[i-1].jbgz=tp[i].jbgz; /*将后一条记录的基本工资拷贝到前一条*/
}
Display(tp,n);
}
void Insert(ZGGZ tp[],int n) /*插入记录*/
{
int i,flag=-1;
char newnum[10];/**/
char find[10];
Display(tp,n);
printf("请输入要插入的职工号的前一个号码:\n"); /*提示信息*/
scanf("%s",find);
for(i=0;i<n;i++) /*从最后一个结点开始向后移动一条*/
{
if(strcmp(find,tp[i].num)==0)
{ flag=i;break;}
}
if(flag!=-1)
for(i=n-1;i>flag;i--)
{
strcpy(tp[i+1].num,tp[i].num); /*当前记录的职工编号拷贝到后一条*/
strcpy(tp[i+1].name,tp[i].name); /*当前记录的姓名拷贝到后一
条*/
tp[i+1].jbgz=tp[i].jbgz; /*当前记录的基本工资拷贝到后一条*/
}
printf("请输入要插入的职工号、姓名和工资数:\n"); /*提示信息*/
scanf("%s%s%f",tp[flag+1].num,tp[flag+1].name,&tp[flag+1].jbgz);
/*输入待插入的职工编号,姓名,基本工资*/
Display(tp,n); /*显示*/
}
void Sort(ZGGZ tp[],int n) /*以职工的基本工资数降序的顺序排序记录*/
{
int i,j,k;
ZGGZ t; /*临时变量做交换数据用*/
Display(tp,n);
for(i=1;i<n;i++)
{
for(j=0,k=0;k<n-i;k++,j++)
if(tp[j].jbgz<tp[j+1].jbgz)
{
t=tp[j];tp[j]=tp[j+1];tp[j+1]=t; /*进行交换*/
}
}
Display(tp,n);
}
void main() /******主函数开始*******/
{
int select; /*保存选择结果变量*/
ZGGZ gz[N]={{"001","苏风",100},{"002","焉国臣",3001},{"003","魏泽楷",3002},{"004","张
震",3003},{"005","陈蕴成",3004},{"006" ,"李健",3005} }; /*定义ZGGZ结构体*/
while(1)
{
menu();
printf(" 请输入0~6的数字:\n"); /*显示提示信息*/
scanf("\n%d",&select);
/*调用主菜单函数,返回值整数作开关语句的条件*/
switch(select)
{
case 0:printf("您即将退出本系统,欢迎使用!\n");exit(0);
case 1:Qur(gz,N);break; /*查找记录*/
case 2:Modify(gz,N);break; /*修改记录*/
case 3:Del(gz,N);break; /*删除记录*/
case 4:Insert(gz,N);break; /*插入记录*/
case 5:Sort(gz,N);break; /*排序记录*/
default:printf("您的输入有误!");break; /*按键有误,停止*/
}
}
}