课程综合设计

来源:互联网 发布:好用的软件源 编辑:程序博客网 时间:2024/05/19 02:20

3、职工综合信息管理系统

要求:设计一个程序来管理职工较全面数据信息,具备数据的输入、查找、删除等功能。具体功能细节可以根据自己理解情况进行增加。


看到这个题目,第一反应就是建立结构体,包括职工编号、姓名、出生日期、职位、入职时间、工资、职位等,具备功能查询,显示员工信息,添加员工,删除,修改员工信息等!思路是建立链表,然后再对链表就插入删除等!!



大致框架,函数后面补充

#include <iostream>#include <string>using namespace std;typedef struct employee{int id;//职工编号char name[20]; char sex[12];char birthdate[20];char post[20];//职务float wages;int worktime;char tel[20];employee *next;}employee;void showmain();//主界面void initList();//链表初始化void showinform();//显示员工信息void search();//查询员工void update();//修改员工信息void insert();//插入结点,就是添加人员信息void deleteINF();//删除结点,就是删除员工信息void exit();//退出void showmain( LinkList L ) {int choice;do {cout << "\t\t-----------------------------------------------" << endl;cout  << endl;cout << "\t\t-             欢迎进入员工管理系统              " << endl;cout  << endl;cout << "\t\t-----------------------------------------------" << endl;cout  << endl;cout << "\t\t-                1.所有员工信息                     " << endl;cout  << endl;cout << "\t\t-                2.添加新员工                        " << endl;cout  << endl;cout << "\t\t-                3.修改员工信息                     " << endl;cout  << endl;cout << "\t\t-                4.查询员工信息                   " << endl;cout  << endl;cout << "\t\t-                5.删除员工信息                   " << endl;cout  << endl;cout << "\t\t-                0.退出系统                         " << endl;cout  << endl;cout << "\t\t-----------------------------------------------" << endl;do {cout << "\t\t请选择: " ;cin >> choice;} while ( choice < 0 || choice > 6 );switch ( choice ){case 1:showinform(  ) ;break;case 2: insert( );break;case 3: update(  );break;case 4: {search();}break;case 5: deleteINF( );break;case 0: Exit(  );break;default: break;}}while (1);} int main(){while(1){showmain( );}return 0;}


完善后,细化了一下函数,查询、删除可以按照id和姓名查询、删除,引入了输出输入文本,更容易保存信息不丢失,具体看下面!

#include <string>#include <iostream>#include <fstream>#include <iomanip>using namespace std;typedef struct employee{int id;//职工编号char name[20]; char sex[12];char birthdate[20];char post[20];//职务float wages;int worktime;char tel[20];}employee;typedef struct LNode{employee data;struct LNode *next;}LNode, *LinkList;void showMain( LinkList L ); //显示主界面void initList( LinkList &L ); //初始化链表void showAllInform( LinkList L ); //显示所有员工信息void searchById( LinkList L, int id, LinkList &result ); //按ID查询void searchByName( LinkList L, char name[], LinkList &result ); //按姓名排序void searchMain( LinkList L ,LinkList &result, int flag ); //查询主界面void update( LinkList &L ); //修改员工信息void insert( LinkList &L ); //添加员工记录void deleteById( LinkList L, int id ); //根据员工ID删除void deleteByName( LinkList L, char name[] ); //根据员工姓名删除void deleteMain( LinkList L ); //删除主界面void readInform( LinkList &L ); //读入数据文件void saveInform( LinkList L ); //保存数据文件void myExit( LinkList L ); //退出程序void showOneInform( LinkList p ); //显示某个员工记录void InputOneInform( employee &p ); //输入一个员工信息int ListLength( LinkList L ); //求表长void showMain( LinkList L ) {int choice;do {cout << "\t\t-----------------------------------------------" << endl;cout  << endl;cout << "\t\t-             欢迎进入员工管理系统              " << endl;cout  << endl;cout << "\t\t-----------------------------------------------" << endl;cout  << endl;cout << "\t\t-                1.所有员工信息                     " << endl;cout  << endl;cout << "\t\t-                2.添加新员工                        " << endl;cout  << endl;cout << "\t\t-                3.修改员工信息                     " << endl;cout  << endl;cout << "\t\t-                4.查询员工信息                   " << endl;cout  << endl;cout << "\t\t-                5.删除员工信息                   " << endl;cout  << endl;cout << "\t\t-                0.退出系统                         " << endl;cout  << endl;cout << "\t\t-----------------------------------------------" << endl;do {cout << "\t\t请选择: " ;cin >> choice;} while ( choice < 0 || choice > 6 );switch ( choice ){case 1:showAllInform( L ) ;break;case 2: insert( L);break;case 3: update( L );break;case 4: {LinkList result;searchMain( L, result, 1 );}break;case 5: deleteMain( L );break;case 0: myExit( L );break;default: break;}}while (1);} void initList( LinkList &L )//初始化链表{L = (LinkList) malloc( sizeof( LNode ));L->next = NULL;LinkList  p = L, nodeNew;employee temp;cout << endl;cout << "\t\t员工信息录入,以-1结束" << endl;cout << "\t\t员工ID: ";cin >> temp.id;while ( temp.id != -1 ){nodeNew = ( LinkList ) malloc( sizeof(LNode));if ( !nodeNew ){cout << "Error!" << endl;}nodeNew->next = NULL;cout << "\t\t员工姓名:";cin >> temp.name;cout << "\t\t员工性别:";cin >> temp.sex;cout << "\t\t员工生日(1980-01-01):";cin >> temp.birthdate;cout << "\t\t员工职务:";cin >> temp.post;cout << "\t\t员工工资:";cin >> temp.wages;cout << "\t\t员工入职时长(年):";cin >> temp.worktime;cout << "\t\t员工电话: ";cin >> temp.tel;nodeNew->data = temp;p->next = nodeNew;p = nodeNew;cout << "\t\t员工信息录入,以-1结束" << endl;cout << "\t\t员工ID: ";cin >> temp.id;}}void showAllInform( LinkList L )//显示所有员工的信息{LinkList p = L->next;cout << endl;if ( p ){cout<< setw(5) << "ID" << setw(10)  << " 姓名" << setw(6) <<  "性别"  << setw(12)<< "  生日" << setw(10)  << "  职务" << setw(6)  << " 工资"  << setw(12)<<  "入职时长 "<< setw(9)<< "电话" <<endl;while ( p ){cout<< setw(5) << p->data.id << setw(10)  << p->data.name << setw(6) << p->data.sex  << setw(12)<< p->data.birthdate << setw(10)  << p->data.post << setw(6)  << p->data.wages << setw(8)<< p->data.worktime << setw(16)<< p->data.tel <<endl;p = p->next;}}else{cout << "无记录!" << endl;}}void searchById( LinkList L, int id, LinkList &result )//根据id搜索{LinkList p = L->next;while ( p != NULL && p->data.id != id ){p = p->next;}showOneInform( p );result = p;}void searchByName( LinkList L,char *name, LinkList &result )//根据姓名搜索{LinkList p = L->next;while ( p != NULL && strcmp( p->data.name, name) != 0 ){p = p->next;}showOneInform( p );result = p;}void searchMain( LinkList L , LinkList &result, int flag ) //flag 不为0 则 循环{int choice;do{cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                        信息查询                      " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                       1.按编号查询                 " << endl;cout << endl;cout << "\t\t-                       2.按姓名查询                 " << endl;cout << endl;cout << "\t\t-                       0.退出                          " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;do {cout << "\t\t请选择: ";cin >> choice;} while ( choice < 0 || choice > 2 );if ( choice == 0 ){break;}switch ( choice ){case 1: {int id;cout << "\t\t请输入编号: ";cin >> id;searchById(  L, id, result );}break;case 2:{char name[20];cout << "\t\t请输入姓名:";cin >> name;searchByName( L, name, result );}break;default: cout << "输入错误!\n";}}while ( flag );}void update( LinkList &L )//修改员工信息{int choice;LinkList result;searchMain( L, result, 0 );//首先查询有没有该人才能修改!!employee data = result->data;if ( result ){while ( 1 ){cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         修改选项                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         1.修改姓名                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         2.修改性别                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         3.修改生日                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         4.修改职务                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << "\t\t-                         5.修改工资                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << "\t\t-                         6.修改入职时长                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         7.修改电话                    " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                         0.退出                        " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;do {cout << "\t\t 请选择:" ;cin >> choice;} while ( choice < 0 || choice > 7);if ( choice == 0 ){break;}switch ( choice ){case 1:{cout << "\t\t员工姓名:";cin >> data.name;}break;case 2:{cout << "\t\t员工性别:";cin >> data.sex;}break;case 3:{cout << "\t\t员工生日(1990-12-12):";cin >> data.birthdate;}break;case 4:{cout << "\t\t员工职务:";cin >> data.post;}case 5:{cout << "\t\t员工工资:";cin >> data.wages;}break;case 6:{cout << "\t\t员工入职时长:";cin >> data.worktime;}break;case 7:{cout << "\t\t员工电话:";cin >> data.tel;}break;default: break;}}}result->data = data;}void insert( LinkList &L )//添加员工信息,插入结点{employee temp,data;LinkList result;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                        添加信息                      " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << "\t\t员工信息录入,以-1结束" << endl;cout << "\t\t员工ID: ";cin >> temp.id;while ( temp.id != -1 ){searchById( L, temp.id ,result );//调用查询函数看记录是否存在再判断录入if ( result != NULL  ){cout << "\t\t该记录已存在!\n";break;}else{cout << "\t\t员工姓名:";cin >> temp.name;cout << "\t\t员工性别:";cin >> temp.sex;cout << "\t\t员工生日(1980-01-01):";cin >> temp.birthdate;cout << "\t\t员工职务:";cin >> temp.post;cout << "\t\t员工工资: ";cin >> temp.wages;cout << "\t\t员工入职时长: ";cin >> temp.worktime;cout << "\t\t员工电话: ";cin >> temp.tel;LinkList np = (LinkList)malloc( sizeof(LNode));np->data = temp;np->next = L->next;L->next = np;cout << "\t\t员工信息录入,以-1结束" << endl;cout << "\t\t员工ID: ";cin >> temp.id;}}}void deleteById( LinkList L, int id )//根据id删除{LinkList result, q =  L, p = q->next;searchById( L, id, result );if ( result != NULL ){while ( p != NULL && p != result ){q = p;p = p->next;}q->next = q->next->next;free( p );}}void deleteByName( LinkList L, char *name )//根据名字删除{LinkList result, q =  L, p = q->next;searchByName( L, name, result );if ( result != NULL ){while ( p != NULL && p != result ){q = p;p = p->next;}q->next = q->next->next;free( p );}}void deleteMain( LinkList L ){int choice;int id;char name[20];cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                        删除信息                      " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                        1.按编号删除                 " << endl;cout << endl;cout << "\t\t-                        2.按姓名删除                " << endl;cout << endl;cout << "\t\t-                        0.退出                         " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;do {cout << "\t\t请选择: ";cin >> choice;} while ( choice > 2 || choice < 0 );switch ( choice ){case 1: {cout << "\t\t请输入ID:" ;cin >> id;deleteById( L, id );}break;case 2: {cout << "\t\t请输入姓名:" ;cin >> name;deleteByName( L, name );}case 0: break; // 直接退出default: cout << "输入错误!" << endl;}}void showOneInform( LinkList p ){if ( p != NULL ){cout<< setw(5) << "ID" << setw(10)  << " 姓名" << setw(6) <<  "性别"  << setw(12)<< "  生日" << setw(10)  << "  职务" << setw(6)  << " 工资"  << setw(12)<<  "入职时长 "<< setw(9)<< "电话" <<endl;cout<< setw(5) << p->data.id << setw(10)  << p->data.name << setw(6) << p->data.sex  << setw(12)<< p->data.birthdate << setw(10)  << p->data.post << setw(6)  << p->data.wages << setw(8)<< p->data.worktime << setw(16)<< p->data.tel <<endl;p = p->next;}else{cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-                      无对应记录!                 " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;}}void readInform( LinkList &L ) //读入文本和输出到文本这部分不是很了解,参考了网上资料{int choice;ifstream inFile( "Employee.txt" );// ifstream是从硬盘读取内存if ( !inFile )//没有名为Employee.txt文本时为失败{cout << "\t\t打开文件失败!" << endl;cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-               1.创建数据库                     " << endl;cout << endl;cout << "\t\t-               0.退出                              " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;do {cout << "\t\t请选择: ";cin >> choice;} while ( choice >1 || choice < 0 );switch ( choice ){case 0: exit( 1 );break;case 1: initList( L );//链表初始化break;default: break;}}else{LinkList p, Node;L = (LinkList) malloc( sizeof(LNode));//给指针变量L动态分配存储单元Node = (LinkList) malloc(sizeof(LNode));Node->next = NULL;if ( !Node ){cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-创建内存失败                                       " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;myExit( L );}inFile >> Node->data.id;p = L;while ( !inFile.eof() ){inFile >> Node->data.name >> Node->data.sex >> Node->data.birthdate  >> Node->data.post >> Node->data.wages >> Node->data.worktime >> Node->data.tel;p->next = Node;p = Node;Node = (LinkList) malloc(sizeof(LNode));Node->next = NULL;if ( !Node ){cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-创建内存失败                                       " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;myExit( L );}inFile >> Node->data.id;}}inFile.close();}void saveInform( LinkList L )   //保存函数{LinkList p = L->next; //带头结点链表ofstream outFile( "Employee.txt" );//ofstream是从内存到硬盘输出if ( !outFile ) //打开文件失败{cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-记录保存失败                                       " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;}while ( p ) //不到文件尾时继续保存{outFile<< p->data.id << "\t" << p->data.name << "\t" << p->data.sex << "\t"<< p->data.birthdate << "\t" << p->data.post << "\t" << p->data.wages << "\t" << p->data.worktime << "\t" << p->data.tel << endl;p = p->next;}outFile.close();}void InputOneInform( employee &data ){cout << "\t\t员工ID: ";cin >> data.id;cout << "\t\t员工姓名:";cin >> data.name;cout << "\t\t员工性别:";cin >> data.sex;cout << "\t\t员工生日(1980-01-01):";cin >> data.birthdate;cout << "\t\t员工职务:";cin >> data.post;cout << "\t\t员工工资: ";cin >> data.wages;cout << "\t\t员工入职时长: ";cin >> data.worktime;cout << "\t\t员工电话: ";cin >> data.tel;}int ListLength( LinkList L  )//求表长函数{int length = 0;LinkList p = L->next;while ( p != NULL ){++length;p = p->next;}return length;}void myExit( LinkList L ){if ( L->next  ){saveInform( L );   //退出保存}cout << "\t\t-----------------------------------------------" << endl;cout << endl;cout << "\t\t-               感谢您的使用                         " << endl;cout << endl;cout << "\t\t-----------------------------------------------" << endl;exit(0);}int main(){while(1){LinkList L = NULL;//不断循环readInform( L );showMain( L );}return 0;}

1.由于一开始是没有文件employee.TXT,所以一进去就提示打开出错,要求创建!如图



2.录入信息


 显示成功



3.添加林欣的信息,由于添加员工信息函数下会查询是否存在该人,所以就不演示查询功能!




添加成功


4.将张俊的工资修改成10000




添加成功!



5.删除张大富信息,根据编号删除



删除成功


6.输出文本!!


0 0
原创粉丝点击