课程综合设计
来源:互联网 发布:好用的软件源 编辑:程序博客网 时间: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
- 课程综合设计题目
- 课程综合设计
- 课程综合设计
- 课程综合设计
- 课程综合设计
- 课程综合设计
- 课程综合设计
- 课程综合设计
- 课程综合设计题最终版
- “C++程序设计”课程综合设计题目
- 自动班“C++程序设计”课程综合设计题目
- 综合课程第二次作业
- 综合设计
- 《软件工程综合实践》课程安排
- 《网络通信软件综合实验》课程综合实验报告
- jsp html css mysql 课程综合实验
- 设计模式综合
- 操作系统文件系统综合设计
- flexbuilder4.6破解方案
- 机器学习中的相似性度量
- PL/SQL 解释窗口字段
- 2014重新认识我
- 长尾理论与二八理论
- 课程综合设计
- UI定制第一季第一集:UITabBar
- 双重锁定
- IOS 开发常用第三方库
- 数据挖掘中的大数据集
- weka[2] - J48(一)
- 应用根路径整理类
- 查找最小的k 个元素
- BOOL与bool区别