编程论坛's Archiver

雪冬青 发表于 2008-6-24 10:52

各位高手帮忙看哈那里出了错!!

//=========================================================
//     此程序是一个职工管理系统程序,主要实现的功能是
//     增加职工信息记录、显示职工信息、修改职工信息、
//     删除职工信息、统计职工信息.并且将职工信息以2进
//     制的形式写入文件中来保存.此程序是一个菜单程序.
//=========================================================

#include<iostream>
#include<string.h>
#define MAXNUM 30
using namespace std;

//选择的操作(1-6)
int choice=0;

//文件指针&文件名字
FILE *fp;
char f_name[]="employee.txt";

//职工结构
struct Employee{
        char   name[20];                 //姓名
        int    ID;                       //ID号
        char   sex[10];                  //性别
        int    age;                      //年龄
        double wage;                     //工资
};

//保存职工信息的数组
struct Employee Emp_item[MAXNUM];

//需要查找或者修改或者删除的职工姓名
char eg_name[20];

//保存在数组中职工的个数
int total_num=0;

//定义一个菜单函数
void main_menu(){
        cout<<"||================================||"<<"\n"
                <<"||          职工管理系统          ||"<<"\n"
                <<"||   1:输入职工信息               ||"<<"\n"
                <<"||   2:显示职工信息               ||"<<"\n"
                <<"||   3:修改职工信息               ||"<<"\n"
                <<"||   4:删除职工信息               ||"<<"\n"
                <<"||   5:统计职工信息               ||"<<"\n"
                <<"||   6:退出系统                   ||"<<"\n"
                <<"||================================||"<<endl;
        cout<<"请输入你需要的操作(1-6):";
        cin>>choice;
        if(choice>6 || choice<1){
                cout<<"操作失败!"<<endl;
                exit(1);
        }
}

//将文件中的信息读入数组Emp_item[]中
void readin(FILE *fp){
        int number=0;
        struct Employee temp;
        if((fp=fopen(f_name,"r"))==NULL){
                cout<<"文件无法打开或者出错";
                exit(1);
        }
        for(;!feof(fp);){
                fread(&temp,sizeof(Employee),1,fp);
                memcpy(&Emp_item[number++],&temp,sizeof(Employee));
        }
        total_num=number;
        fclose(fp);
}


//定义一个输入函数
void input_item(struct Employee item,FILE *){
         cout<<"请输入职工姓名:";
         cin>>item.name;
         cout<<"请输入职工ID号:";
         cin>>item.ID;
         cout<<"请输入职工性别:";
         cin>>item.sex;
         cout<<"请输入职工年龄:";
         cin>>item.age;
         cout<<"请输入职工工资:";
         cin>>item.wage;
         if((fp=fopen(f_name,"a+"))==0){
                 cout<<"文件无法打开"<<endl;
             exit(1);
         }
         fwrite(&item,sizeof(Employee),1,fp);
         fclose(fp);
}

//定义一个输出函数
void output_item(struct Employee item){
        cout<<"姓名\tID号\t性别\t年龄\t工资\n"
                <<item.name<<"\t"<<item.ID<<"\t"<<item.sex<<"\t"<<item.age<<"\t"<<item.wage<<endl;
}

//主程序入口
int main(){
        main_menu();
        while(choice!=6){
                switch(choice){
                case 1:{
                        struct Employee tmp;
                        input_item(tmp,fp);
                        main_menu();
                           }
                        break;
                case 2:{
                        cout<<"输入职工姓名来显示此职工的所有信息:";
                        cin>>eg_name;
                        readin(fp);
                        //找到匹配职工信息时显示
                        for(int i=0;i<total_num-1;i++){
                                if(strcmp(eg_name,Emp_item[i].name)==0)
                                        output_item(Emp_item[i]);
                        }
                        //没有找到匹配职工信息时显示
                        if((i==total_num-1) && strcmp(eg_name,Emp_item[i].name)!=0){
                                cout<<"没有找到匹配的职工信息"<<endl;
                                exit(1);
                        }
                        //for(int i=0;i<total_num-1;i++){
                        //    output_item(Emp_item[i]);
                        //}
                        main_menu();
                           }
                        break;
                case 3:{
                        struct Employee item_before;
                        cout<<"输入职工姓名来修改此职工的信息:";
                        cin>>eg_name;
                        readin(fp);
                        //找到匹配职工姓名时修改此职工的信息
                        for(int i=0;i<total_num-1;i++){
                                if(strcmp(eg_name,Emp_item[i].name)==0){
                                        memcpy(&item_before,&Emp_item[i],sizeof(Employee));
                                        cout<<"找到了匹配的职工姓名,请输入新的职工信息"<<endl;
                                        cout<<"新的姓名:";
                                        cin>>Emp_item[i].name;
                                        cout<<"新的ID号:";
                                        cin>>Emp_item[i].ID;
                                        cout<<"新的性别:";
                                        cin>>Emp_item[i].sex;
                                        cout<<"新的年龄:";
                                        cin>>Emp_item[i].age;
                                        cout<<"新的工资:";
                                        cin>>Emp_item[i].wage;
                                        break;
                                }
                        }
                       
                        if((fp=fopen(f_name,"w"))==NULL){
                                cout<<"文件无法打开或者出错"<<endl;
                                exit(1);
                        }
                        for(int j=0;j<total_num-1;j++){
                                fwrite(&Emp_item[j],sizeof(Employee),1,fp);
                        }
                        fclose(fp);
                       
                        cout<<"修改前的信息为:";
                        output_item(item_before);
                        cout<<"修改后的信息为:";

                        output_item(Emp_item[i]);
                        main_menu();
                           }
                        break;
                case 4:{
                        cout<<"请输入你要删除的职工姓名:";
                        cin>>eg_name;
                        readin(fp);
                        for(int i=0;i<total_num-1;i++){
                                if(strcmp(eg_name,Emp_item[i].name)==0){
                                        for(int j=0;j<total_num-i-1;j++){
                                                memcpy(&Emp_item[i],&Emp_item[i+1],sizeof(Employee));
                                                i++;
                                        }
                                        break;
                                }
                        }
                        if((fp=fopen(f_name,"w"))==NULL){
                                cout<<"文件无法打开或者出错"<<endl;
                                exit(1);
                        }
                        for(int k=0;k<total_num-2;k++){
                                fwrite(&Emp_item[k],sizeof(Employee),1,fp);
                        }
                        fclose(fp);
                        main_menu();
                           }
                        break;
                case 5:{
                        //定义平均工资和总工资
                        double avg_wage,total_wage=0;
                        readin(fp);
                        for(int i=0;i<total_num-1;i++){
                                total_wage+=Emp_item[i].wage;
                        }
                        avg_wage=total_wage/total_num;
                        cout<<"平均工资为:"<<avg_wage<<"\n"
                                <<"总工资为:"<<total_wage<<endl;
                        main_menu();
                           }
                        break;
                case 6:
                        break;
                default:
                        break;
                }
        }
        return 0;
}

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.