标题:明天进行学校的C语言答辩了,有问题想问大家,在线等
只看楼主
echalious
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-16
 问题点数:0 回复次数:3 
明天进行学校的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;   /*按键有误,停止*/
        }
    }
}
搜索更多相关主题的帖子: C语言 学校 答辩 职工 系统 
2008-07-16 17:43
ddd121
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-7-16
得分:0 
- -好长 手上正好没有编译软件 回头下一个 你看看是不是回车字符没有吸收掉之类的问题?
2008-07-16 21:25
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
得分:0 
问题在menu函数里那个清屏的命令  把它注释掉再试试看
2008-07-16 22:06
xuanzilie
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-12
得分:0 
另外主函数写成int main()好点 规范
2008-07-16 22:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-224094-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062217 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved