C语言课程设计_职工信息管理系统_单链表实现程序源代码

合集下载

C语言课程设计 职工信息管理系统 结构体数组实现程序源代码

C语言课程设计 职工信息管理系统 结构体数组实现程序源代码

//C语言课程设计职工信息管理系统—结构体数组实现#include <stdio.h>#include <stdlib.h>#include <string.h>struct employee{char num[10];char name[15];char sex[5];char bm[20];char zc[20];int gz;};int read_file(struct employee em[]);void menu();void write_file(struct employee em[]);void add();void select(); //查看职工所有信息void zc_query(); //按职称查询void num_del(); //按工号删除void tongji(); //统计void sort(); //排序void num_modify(); //按工号修改职工信息void save(); //保存信息void disp(); //显示职工信息void fh(); //返回主菜单struct employee em[300]; //这个数组用来保存所有的职工信息和文件里面的一致int Number=0; //记录总的职工人数也就是数组/文件里面的职工人数void menu(){printf("\t***********************************************************************\n");printf("\t* *\n");printf("\t* 职工信息管理系统_结构体数组实现*\n");printf("\t* *\n");printf("\t* [1] 增加职工信息 [2] 查看职工信息 *\n");printf("\t* [3] 查找职工信息 [4] 删除职工信息 *\n");printf("\t* [5] 统计 [6] 职工工资排列 *\n");printf("\t* [7] 修改职工信息 [8] 保存职工信息 *\n");printf("\t* [9] 显示职工信息 [0] 退出系统 *\n");printf("\t* *\n");printf("\t***********************************************************************\n");}void main(){int choose=0;FILE *fp=NULL;char yesorno;if((fp=fopen("employee1.txt","rb+"))==NULL){printf("\n=========>提示:文件不存在,是否要创建一个?(y/n)\n");scanf("%c",&yesorno);if(yesorno=='y'||yesorno=='Y'){//这里仅为了建立文件fp=fopen("employee1.txt","wb+");fclose(fp); //关闭fp所指的文件,释放文件缓冲区}elseexit(0);}else{Number=read_file(em); //要是文件已经有数据将数据初始化到数组中}system("cls");while(1){menu();printf("\t\t====>请选择:");scanf("%d",&choose);system("cls");switch(choose){case 0:exit(0); //退出break;case 1:add();fh();//增加职工信息 break;case 2:select();fh();//查看职工信息 break;case 3:zc_query();fh();// 查找break;case 4:num_del();fh();//删除break;case 5:tongji();fh();//统计break;case 6:sort();fh();//排序break;case 7:num_modify();fh();//修改后返回 break;case 8:save();fh();//保存break;case 9:disp();fh();break;//显示default:break;}fflush(stdin);getchar();system("cls");}}void save(){printf("\t=====程序在运行时已自动保存.....\n");}void fh(){printf("\t===>按Enter键返回主菜单\n");}void num_modify() //修改职工信息{FILE *fp=NULL;char gh[60];int i=0;int changeIndex=0; //changeIndex 改变标记int index=0;printf("请输入要修改的职工工号:");scanf("%s",gh);for (i=0;i<Number;i++){if (strcmp(gh,em[i].num)==0) //比较输入工号和数组中已有工号{changeIndex=i; //保存要修改的人的下标break;}}printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[changeIndex].num,em[chan geIndex].name,em[changeIndex].sex,em[changeIndex].bm,em[changeIndex]. zc,em[changeIndex].gz);printf("请重新输入该职工信息");printf("工号:");scanf("%s",em[changeIndex].num);printf("姓名:");scanf("%s",em[changeIndex].name);printf("性别:");scanf("%s",em[changeIndex].sex);printf("部门:");scanf("%d",em[changeIndex].bm);printf("职称:");scanf("%s",em[changeIndex].zc);printf("工资:");scanf("%d",&em[changeIndex].gz);//信息修改后重新更新文件里面的数据以保持数据一致性fp=fopen("employee1.txt","wb+");for (i=0;i<Number;i++){fwrite(&em[i],sizeof(struct employee),1,fp); //把ptr所指向n*size个字节输入到fp所指向的文件中}fclose(fp);printf("\t=======>修改成功\n");}void disp() //输出所有职工信息{int i=0;for (i=0;i<Number;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void sort()//排序{struct employee t;int wantNUmber=0;int i=0;int j=0;int k=0;for(i=0;i<Number-1;i++){k=i;for(j=i+1;j<Number;j++){if(em[j].gz>em[k].gz)k=j;}if(k!=i){t=em[i];em[i]=em[k];em[k]=t;}}printf("你想输出前几名职工的信息:");scanf("%d",&wantNUmber);if (wantNUmber>Number){wantNUmber=Number;}printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for(i=0;i<wantNUmber;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i].sex, em[i].bm,em[i].zc,em[i].gz);}}void tongji()//统计{int i,m,k,max,min;double sum=0.0;for(i=0;i<Number;i++){sum=sum+em[i].gz;}printf("全体职工的总工资为:%f\n",sum);printf("平均工资为:%f\n",sum/Number);i=0;m=0;max=0;max=em[m].gz;for(i=1;i<Number;i++){if (em[i].gz>max)m=i;max=em[m].gz;}printf("最高工资为:%d\n",max);printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[m].num,em[m].name,em[m]. sex,em[m].bm,em[m].zc,em[m].gz);i=0;k=0;min=0;min=em[0].gz;for(i=1;i<Number;i++){if (em[i].gz<min)k=i;min=em[k].gz;}printf("最低工资:%d\n",min);printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[k].num,em[k].name,em[k]. sex,em[k].bm,em[k].zc,em[k].gz);}void num_del()//按工号删除FILE *fp=NULL;char gh[60];int i=0;int j=0;printf("请输入要删除的职工工号:");scanf("%d",gh);for(i=0;i<Number;i++){if (strcmp(gh,em[i].num)==0) //如果查找到就删除{for (j=i;j<Number-1;j++){em[j]=em[j+1];}Number--;}}//将剩余数据写入文件重新一写的方式打开文件把以前的数据擦除了fp=fopen("employee1.dat","wb");for (i=0;i<Number;i++){fwrite(&em[i],sizeof(struct employee),1,fp);}fclose(fp);printf("删除成功;\n");}void zc_query()//按职称查找{char zc[20];int i=0;printf("请输入要查找职工职称:");scanf("%s",zc);system("cls");printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for (i=0;i<Number;i++){if (strcmp(zc,em[i].zc)==0){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void select()//查看职工{int i=0;printf("以下是全部职工信息\n");printf("\t工号\t姓名\t性别\t部门\t职称\t工资\n");for(i=0;i<Number;i++){printf("\t%s\t%s\t%s\t%s\t%s\t%d\n\n",em[i].num,em[i].name,em[i]. sex,em[i].bm,em[i].zc,em[i].gz);}}void add()//增加职工{int numberTemp=0;int i=0;struct employee temp; //临时保存信息printf("请输入要增加职工信息的个数:");scanf("%d",&numberTemp);for(i=0;i<numberTemp;i++){printf("输入第%d个职工信息\n",i+1);printf("工号:");scanf("%s",temp.num);printf("姓名:");scanf("%s",);printf("性别:");scanf("%s",temp.sex);printf("部门:");scanf("%s",temp.bm);printf("职称:");scanf("%s",temp.zc);printf("工资:");scanf("%d",&temp.gz);em[Number++]=temp; //将刚添加的写入到数组write_file(&temp); //将刚添加的写入到文件}printf("添加成功\n");}void write_file(struct employee *em){FILE *fp=NULL;fp=fopen("employee1.txt","rb+");fwrite(em,sizeof(struct employee),1,fp);fclose(fp);}int read_file(struct employee em[]){FILE *fp=NULL;int i=0;fp=fopen("employee1.txt","rb");while(fread(&em[i],sizeof(struct employee),1,fp)) i++;fclose(fp);return i;}。

课程信息管理系统(C语言)

课程信息管理系统(C语言)

课程信息管理系统源代码#include<stdio.h>#include<stdlib.h>#include<string.h>struct Class{int Number;int ClassNumber;char Name[10];float TeachTime;float PracticeTime;float Credit;char Semester[10];char TextWay[10];} Class[10],CL;/**********输入模块***********/void save()//定义函数save,向文件输出课程信息{FILE *fp;int i;if ((fopen("Class.txt", "r")) == NULL)//打开输出文件Class fp = fopen("Class.txt", "w+");elsefp = fopen("Class.txt", "r+");for (i = 0; i<10; i++){fprintf(fp, "%d", Class[i].Number);fputc('\n', fp);fprintf(fp, "%d", Class[i].ClassNumber);fputc('\n', fp);fprintf(fp, "%s", Class[i].Name);fputc('\n', fp);fprintf(fp, "%f",Class[i].TeachTime);fputc('\n', fp);fprintf(fp, "%f", Class[i].PracticeTime);fputc('\n', fp);fprintf(fp, "%f", Class[i].Credit);fputc('\n', fp);fprintf(fp, "%s", Class[i].Semester);fputc('\n', fp);fprintf(fp, "%s", Class[i].TextWay);fputc('\n', fp);}fclose(fp);}void Input(){int i = 0;char c;for (int t = 1; t;i++){printf("请输入要输入的课程的相关信息:\n");printf("请输入记录编号:");scanf("%d", &Class[i].Number);printf("请输入课程编号:");scanf("%d", &Class[i].ClassNumber);printf("请输入课程名:");scanf("%s", Class[i].Name);printf("请输入讲课学时:");scanf("%f", &Class[i].TeachTime);printf("请输入实践学时:");scanf("%f", &Class[i].PracticeTime);Class[i].Credit = (Class[i].TeachTime + Class[i].PracticeTime) / 16;printf("请输入开课学期:");scanf("%s", Class[i].Semester);printf("请输入考核方式:");scanf("%s", Class[i].TextWay);printf("是否继续输入Y/N\n");fflush(stdin);scanf("%c",&c);switch (c){case 'Y':break;case 'N':t = 0;break;default:printf("输入错误\n");}}save();}/*******修改模块*******/void Modification()int n,i;printf("请输入您要修改的课程的记录编号:");scanf("%d", &n);for ( i = 0; i < 10; i++){if (Class[i].Number == n)break;}FILE*fp;if ((fp = fopen("Class.txt", "r")) == NULL){printf("cannot open file\n");exit(0);}fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay);printf("请输入要修改的课程的相关信息:\n");printf("请输入课程编号:");scanf("%d", &CL.ClassNumber);Class[i].Number=CL.ClassNumber;printf("请输入课程名:");scanf("%s", );strcpy(Class[i].Name,);printf("请输入讲课学时:");scanf("%f", &CL.TeachTime);Class[i].TeachTime=CL.TeachTime;printf("请输入实践学时:");scanf("%f", &CL.PracticeTime);Class[i].PracticeTime=CL.PracticeTime;CL.Credit = (CL.TeachTime+ CL.PracticeTime) / 16;Class[i].Credit=CL.Credit ;printf("请输入开课学期:");scanf("%s", CL.Semester);strcpy(Class[i].Semester,CL.Semester);printf("请输入考核方式:");scanf("%s", CL.TextWay);strcpy(Class[i].TextWay,CL.TextWay);save();fclose(fp);}/***********统计模块***********/void Statistics()int i,n1=0,n2=0;float m1=0,m2=0;FILE*fp;if ((fp = fopen("Class.txt", "r")) == NULL){printf("cannot open file\n");exit(0);}for ( i = 0; i < 10; i++){fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay);if (strcmp(Class[i].Semester,"春季")==0){n1++;m1= m1 + Class[i].Credit;}else if (strcmp(Class[i].Semester,"秋季")==0){n2++;m2 = m2 + Class[i].Credit;}}printf("春季学期总课程数为%d\n", n1);printf("春季学期总学分数为%f\n", m1);printf("秋季学期总课程数为%d\n", n2);printf("秋季学期总学分数为%f\n", m2);}/**********查询模块**************/void Query(){int i, k,a;float b;char m[10];FILE*fp;if ((fp = fopen("Class.txt", "r")) == NULL){printf("cannot open file\n");exit(0);}for (i= 0; i<10; i++)fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay);printf("查询模块:");printf("\n");printf("***********************************************\n");printf("* *\n");printf("* 1:课程编号2:课程学分*\n");printf("* *\n");printf("* 3:开课学期*\n");printf("* *\n");printf("***********************************************\n");printf("\n\n请输入查询选项:");scanf("%d", &k);for (; k<1 || k>4;){printf("请输入1到4之间的整数:");scanf("%d", &k);}if (k==1){printf("请输入要查询的课程编号:");scanf("%d", &a);for ( i = 0; i < 10; i++){if (Class[i].ClassNumber == a)break;}printf("记录编号:%d\n",Class[i].Number);printf("课程编号:%d\n",Class[i].ClassNumber);printf("课程名:%s\n",Class[i].Name);printf("讲课学时:%f\n",Class[i].TeachTime);printf("实践学时:%f\n",Class[i].PracticeTime);printf("学分:%f\n",Class[i].Credit);printf("开课学期:%s\n",Class[i].Semester);printf("考核方式:%s\n\n",Class[i].TextWay);}else if (k==2){printf("请输入要查询的课程的学分:");scanf("%f", &b);for ( i = 0; i < 10; i++){if (Class[i].Credit == b){printf("记录编号:%d\n",Class[i].Number);printf("课程编号:%d\n",Class[i].ClassNumber);printf("课程名:%s\n",Class[i].Name);printf("讲课学时:%f\n",Class[i].TeachTime);printf("实践学时:%f\n",Class[i].PracticeTime);printf("学分:%f\n",Class[i].Credit);printf("开课学期:%s\n",Class[i].Semester);printf("考核方式:%s\n\n",Class[i].TextWay);}}}else{printf("请输入要查询的开课学期:");scanf("%s", m);for ( i = 0; i < 10; i++){if (strcmp(Class[i].Semester,m)==0){printf("记录编号:%d\n",Class[i].Number);printf("课程编号:%d\n",Class[i].ClassNumber);printf("课程名:%s\n",Class[i].Name);printf("讲课学时:%f\n",Class[i].TeachTime);printf("实践学时:%f\n",Class[i].PracticeTime);printf("学分:%f\n",Class[i].Credit);printf("开课学期:%s\n",Class[i].Semester);printf("考核方式:%s\n\n",Class[i].TextWay);}}}}/**********添加模块*************/void Add(){int i;FILE*fp;if ((fp = fopen("Class.txt", "r")) == NULL){printf("cannot open file\n");exit(0);}for (i=0; i<10; i++){fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay);if (Class[i].Number == 0)break;}printf("请输入要添加的课程的相关信息:\n");printf("请输入记录编号:");scanf("%d", &Class[i].Number);printf("请输入课程编号:");scanf("%d", &Class[i].ClassNumber);printf("请输入课程名:");scanf("%s", Class[i].Name);printf("请输入讲课学时:");scanf("%f", &Class[i].TeachTime);printf("请输入实践学时:");scanf("%f", &Class[i].PracticeTime);Class[i].Credit = (Class[i].TeachTime + Class[i].PracticeTime) / 16;printf("请输入开课学期:");scanf("%s", Class[i].Semester);printf("请输入考核方式:");scanf("%s", Class[i].TextWay);save();}/********删除模块**********/void Delete(){int n,i;printf("请输入要删除的课程的课程编号:");scanf("%d", &n);FILE*fp;if ((fp = fopen("Class.txt", "r")) == NULL){printf("cannot open file\n");exit(0);}for ( i = 0; i < 10; i++){fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay);if (Class[i].ClassNumber == n)Class[i].Number = 0;Class[i].ClassNumber=0;Class[i].Credit = 0;strcpy(Class[i].Name, "0");Class[i].PracticeTime = 0;strcpy(Class[i].Semester, "0");Class[i].TeachTime=0;strcpy(Class[i].TextWay, "0");break;}}save();fclose(fp);}/*******显示模块**********/void Display(){FILE*fp;if ((fp = fopen("Class.txt", "r")) == NULL){printf("cannot open file\n");exit(0);}for (int i = 0; i<10; i++)fscanf(fp, "%d%d%s%f%f%f%s%s\n",&Class[i].Number,&Class[i].ClassNumber, Class[i].Name, &Class[i].TeachTime, &Class[i].PracticeTime, &Class[i].Credit, Class[i].Semester, Class[i].TextWay);for (i = 0; i < 10&&Class[i].Number!='\0'; i++){printf("记录编号:%d\n",Class[i].Number);printf("课程编号:%d\n",Class[i].ClassNumber);printf("课程名:%s\n",Class[i].Name);printf("讲课学时:%f\n",Class[i].TeachTime);printf("实践学时:%f\n",Class[i].PracticeTime);printf("学分:%f\n",Class[i].Credit);printf("开课学期:%s\n",Class[i].Semester);printf("考核方式:%s\n\n",Class[i].TextWay);}fclose(fp);}/**********退出模块*************/{exit(0);}/**********主函数*************/int main(){char c;while(1){int n;printf("*********************MENU********************\n");printf("* *\n");printf("* 1:课程信息输入2:课程信息修改*\n");printf("* *\n");printf("* 3:课程信息统计4:课程信息查询*\n");printf("* *\n");printf("* 5:课程添加6:课程信息删除*\n");printf("* *\n");printf("* 7:浏览8:退出*\n");printf("* *\n");printf("*********************************************\n");printf("\n\n请选择功能序号:");scanf("%d", &n);/*对选择的数字进行判断*/for (; n<1 || n>8;){printf("请输入1到8之间的整数:");scanf("%d", &n);}/*选择功能*/switch (n){case 1:Input(); Display(); break;case 2:Modification(); Display(); break;case 3:Statistics(); break;case 4:Query(); break;case 5:Add(); Display(); break;case 6:Delete(); Display(); break;case 7:Display();break;case 8:Quit();}printf("是否继续Y/N\n");fflush(stdin);scanf("%c",&c);if(c=='N')Quit();system("cls");}return 0;}。

职工管理系统链表类

职工管理系统链表类

职工管理系统链表类1. 简介职工管理系统是一种用于管理企业内部职工信息的软件系统。

该系统通过链表类的数据结构来组织和存储职工的信息,提供了职工信息的增、删、改、查等功能。

本文将详细介绍职工管理系统链表类的设计和实现。

2. 链表类设计链表是一种常见的数据结构,由多个节点按照一定顺序连接而成。

在职工管理系统中,可以使用链表来存储和管理职工的信息。

下面是链表类的设计:class Employee {public:int id; // 职工编号string name; // 职工姓名string department; // 所属部门Employee* next; // 指向下一个节点的指针Employee(int id, string name, string department) {this->id = id;this->name = name;this->department = department;this->next = nullptr;}};class EmployeeLinkedList {private:Employee* head; // 头节点指针public:EmployeeLinkedList() {head = nullptr;}void addEmployee(int id, string name, string department) {Employee* newEmployee = new Employee(id, name, department);if (head == nullptr) {head = newEmployee;} else {Employee* current = head;while (current->next != nullptr) {current = current->next;}current->next = newEmployee;}}void removeEmployee(int id) {if (head == nullptr) {return; // 链表为空,无需删除}if (head->id == id) {Employee* temp = head;head = head->next;delete temp;} else {Employee* prev = head;Employee* current = head->next;while (current != nullptr) {if (current->id == id) {prev->next = current->next;delete current;return;}prev = current;current = current->next;}}}void updateEmployee(int id, string name, string department) { Employee* current = head;while (current != nullptr) {if (current->id == id) {current->name = name;current->department = department;return;}current = current->next;}}Employee* findEmployee(int id) {Employee* current = head;while (current != nullptr) {if (current->id == id) {return current; // 找到职工信息}current = current->next;}return nullptr; // 未找到职工信息}void printAllEmployees() {cout << "职工信息列表:" << endl;Employee* current = head;while (current != nullptr) {cout << "编号:" << current->id << endl<< "姓名:" << current->name << endl<< "部门:" << current->department << endl<< "--------------------------" << endl;current = current->next;}}};3. 功能说明职工管理系统链表类提供了以下功能:•添加职工:通过addEmployee方法可以向链表中添加新的职工信息。

单链表(员工信息管理)

单链表(员工信息管理)
{ if(p->salary!=0.0)
{
printf("%.1f->",p->salary);
}
p=p->nextnode;
}
printf("NULL");
printf("\n");
}
void Node::showNodeNO()
{
Node *p = this->nextnode;
}
int val3=0;
float sa1=0;
printf("\n");
printf("请输入要设置工资员工的编号: ");
scanf("%d",&val3);
printf("请输入要设置工资: ");
scanf("%f",&sa1);
printf("\n");
// Node *pNew = (Node*)malloc(sizeof(Node));
// pNew->data = val;
// pNew->next = pCur->next;
// pCur->next = pNew;
break;
}
SETADD=true;
while(pCur)
{
p = pCur;
pCur = pCur->nextnode;
free(p);
}
printf("链表已删除 !!!!\n");
p=NULL;

C语言程序设计-职工信息管理系统(链表)

C语言程序设计-职工信息管理系统(链表)

信息与电子工程学院C语言课程设计职工信息管理系统设计实验日期和时间: 2011年06月27日-06月29日实验类别:课程设计实验类型:设计性一、实验环境操作系统:windows xp编程工具:Microsoft Visual C++ 6.0开发环境:CPU(Inter(R)Core(TM)2 Quad cpu QB200 @ 2.33GHz)内存:2.76GB 硬盘:228.3GB开发地点:现代教育中心201机房A17座IP:10.250.11.17二、实验目的和要求实验目的:(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作算法。

(2)使学生进一步掌握程序设计、编写、调试能力。

(3)使学生了解软件开发的基本步骤和内容。

实验要求:完成一个职工信息管理系统程序,具体内容如下:(1)在内存中用链表记录,在硬盘上用二进制文件保存。

(2)设计完的程序能够以命令行或者菜单形式增加、删除、更新和查询数据的内容。

数据内容能够排序以方便查询。

(3)数据库中应该有至少20条记录。

三、实验内容和结果(1)程序整体功能;1、系统总体框2、模块设计该程序主要分为7个模块,分别是创建与添加模块、显示模块、查找模块、修改模块、删除模块、存档模块、文件统计模块、退出模块(2)程序组成及各模块/函数功能;创建与添加模块:该模块的功能是输入职工信息。

函数为void Add(Node *woker)原理:采用尾插法,先建立链表与头结点,新增一个结点,键盘输入职工号、职工姓名、职工性别、职工出生年月、职工学历、职工职位、职工工资,将这些信息存储到新增结点中,将新增加的节点连到链表的尾端,如此以往,将尾结点的指针域置空,这样就得到了一条存储职工信息的链表,这样就完成了职工信息的创建与增加。

显示模块:该模块功能是显示职工信息。

函数为void Disp(Node *woker) 原理:先新建一个指针P指向头结点,判断它的指针域是否为空,若为空,则输出“没有记录可以显示”;若不为空,则输出它的指针域所指向节点所储存的职工信息,并将该指针向后移一个结点,直到P指向空,即输出了所有职工的信息,这样就完成了所有职工信息的显示。

单链表(c语言实现)贼详细

单链表(c语言实现)贼详细

单链表(c语⾔实现)贼详细直接上代码吧#include<stdio.h>#include<malloc.h>/*单链表特点:它是⼀种动态的储存结构,链表中每个节点占⽤的储存空间不是预先分配的,⽽是运⾏时系统根据需求⽣成的*/typedef struct lnode{int data;struct lnode *next;}lnode,*linklist;//结点定义/*关于头指针的⼀点说明:linklist L;外⾯⽤头指针来标识⼀个单链表,如单链表L,单链表H等,是指链表的第⼀个节点的地址被记录在指针变量L,H中,头指针为NULL时,表⽰⼀个空的单链表,需要进⼀步指出的是:上⾯定义的lnode是节点的类型,linklist是指向lnode节点的指针的类型,为了增强程序的可读性,通常将标识⼀个链表的头指针说明为linklist类型的变量*/linklist creat_linklist_insert_head_nohead(){linklist l=NULL;//定义头指针变量llnode *s;//新建⼀个节点int flag=-1;//输⼊停⽌标志位printf("输⼊整型数据,数据以空格隔开,输⼊数据为-1的时候表⽰输⼊截⽌\n");while(1){int x;scanf("%d",&x);if(x==flag)break;s=(lnode*)malloc(sizeof(lnode));//对s节点申请储存空间s->data=x;//赋值s->next=l;//s节点的next指向头指针l=s;//头指针指向新建⽴的s节点,因为这是在单链表的头部插⼊数据}return l;}//创建⼀个单链表,通过在头部插⼊数据,不含空的头节点//-------------------------------------------------------------------------------------------------------------///*在单链表的表头插⼊,只要x!=flag,就是⼀直申请s结点,从⽽可以⼀直在表头插⼊,其中l=s是最重要的,因为这是将s插⼊到l的表头,因为是在头部插⼊,所以只要⼀个头指针就可以,若是在单链表的尾部插⼊,那么就需要尾部指针关于此函数使⽤的⼀点说明:我们输⼊数据 1 2 3 4 5的时候,输出的是 5 4 3 2 1,因为我们是在头部插⼊数据的*///-------------------------------------------------------------------------------------------------------------//linklist creat_linklist_insert_end_yeshead(){linklist l=NULL,r=NULL;//定义头指针变量和尾指针变量lnode *s;//定义新建节点int flag=-1;//输⼊结束标志位printf("输⼊整型数据,数据以空格隔开,输⼊数据为-1的时候表⽰输⼊截⽌\n");while(1){int x;scanf("%d",&x);if(x==flag)//输⼊数据等于输⼊结束标志位则跳出循环break;s=(lnode*)malloc(sizeof(lnode));//申请内存空间s->data=x;//赋值if(l==NULL)//单链表为空l=s;//则将头指针指向新建节点elser->next=s;//不空的话则将尾指针的next指向s,因为如果不空的话,尾指针指向的肯定是⼀个数据节点,尾指针的next指向s是为了将两个数据节点连接起来r=s;//尾指针移动到新插⼊的节点上}if(r!=NULL)//有数据r->next=NULL;//尾指针的next指向空,说明尾指针后⾯没有数据了,⽬的的为了保证单链表尾指针逻辑的合理性return l;}//建⽴单链表且在链表尾部插⼊数据,含空的头节点//-----------------------------------------------------------------------------------------------------------------------///*在单链表的尾部插⼊,只要没有输⼊结束的标志,就⼀直申请s结点,然后把x赋给s结点的data域,l=s是为了第⼀个结点的结点的处理,因为在此之前l是⼀个空表,然后因为不断有新的结点⽣成,所以就是不断把新的s结点赋给r的next,这样就不断有s结点加⼊到了单链表中间,然后最重要的是每次新的结点加⼊到单链表中后要把r尾指针向后⾯移动,就是⽂中的r=s;关于此函数的⼀点说明:输⼊数据 1 2 3 4 5,输出还是 1 2 3 4 5,⽽不是 5 4 3 2 1,因为我们插⼊数据是在链表尾部插⼊的*///-----------------------------------------------------------------------------------------------------------------------//int length_linklist_yeshead(linklist l){linklist p=l;int j=1;while(p->next){j++;p=p->next;}return j;}//求单链表的表长,针对含有空的头节点的单链表int length_linklist_nohead(linklist l){lnode *p=l;int j=0;while(p){j++;p=p->next;}return j;}//求链表的表长,针对不含空的头节点的单链表lnode *get_linklist(linklist l,int i){lnode *p=l;int j=0;while(p!=NULL&&j<i){p=p->next;j++;}if(j==i)return p;elsereturn NULL;}//单链表的查找第i个元素结点,*p=l就是使p指针指向l链表;lnode *locate_linklist(linklist l,int x){lnode *p=l->next;//l为头节点while(p!=NULL&&p->data!=x)p=p->next;return p;}//单链表查找值为x的结点,找到后返回指向这个结点的指针;以后时刻要记得l为头指针,因为定义了头指针⽐没有定义头指针要⽅便许多;int insert_linklist(linklist l,int i,int x){lnode *p,*s;p=get_linklist(l,i-1);//找到第i-1个结点if(p==NULL){printf("i错误");return0;}elses=(lnode*)malloc(sizeof(lnode));s->data=x;s->next=p->next;p->next=s;return1;}//单链表的第i个结点后⾯的插⼊,重要的是申请,封装s结点,int del_linklist(linklist l,int i){i--;linklist p,s;p=get_linklist(l,i-1);if(p==NULL){printf("该i-1节点不存在");return -1;}else if(p->next==NULL){printf("第i个结点不存在");return0;}else{s=p->next;p->next=s->next;free(s);return1;}}//单链表中删除第i个结点,那么就先要找到i个结点的前驱,也就是第i-1个结点,同理单链表中的插⼊也要知道其前驱结点,所以单链表中的头节点的重要性就可想⽽知了void printf_linklist(lnode *plisthead){lnode *ptemp=plisthead;while(ptemp){printf("%d\t",ptemp->data);ptemp=ptemp->next;}printf("\n");}//链表打印函数int main(){/*linklist l=creat_linklist_insert_end_yeshead();printf("%d\n",length_linklist_yeshead(l));insert_linklist(l,2,100);//第⼆个结点的后⾯插⼊100printf_linklist(l);del_linklist(l,4);//删除第四个结点printf_linklist(l);*//*linklist l=creat_linklist_insert_head_nohead();printf("%d\n",length_linklist_nohead(l));insert_linklist(l,2,100);printf_linklist(l);del_linklist(l,4);printf_linklist(l);*/return0;}。

C语言课程设计_职工信息管理系统_单链表实现程序源代码

C语言课程设计_职工信息管理系统_单链表实现程序源代码

C语言课程设计_职工信息管理系统_单链表实现程序源代码//C语言课程设计职工信息管理系统—单链表实现#include "stdio.h"#include "stdlib.h"#include "string.h"int saveflag=0; /*是否需要存盘的标志变量*/struct employee{char name[15];char num[10];/* 工号 */char sex[4];char bm[15];char zc[20];int gz;};typedef struct node{struct employee data;struct node *next;}Node,*Link;//Link l (注意是:字母l不是数字1)void add(Link l);void disp(Link l); //查看职工所有信息void del(Link l); //删除功能Node* Locate(Link l,char findmess[],char nameornum[]); void Qur(Link l); //查询功能void Tongji(Link l); //统计void Sort(Link l); //排序void Modify(Link l); //修改功能void save(Link l); //将单链表l中的数据写入文件void printe(Node *p); //本函数用于打印链表中某个节点的数据内容 *///以下4个函数用于输出中文标题void printstart();void Wrong();void Nofind();void printc();void menu(){printf("\t****************************************************** ***********\n");printf("\t* *\n");printf("\t* 职工信息管理系统_结构体数组实现*\n");printf("\t* *\n");printf("\t* [1] 增加职工信息 [2] 删除职工信息 *\n");printf("\t* [3] 查询职工信息 [4] 修改职工信息 *\n");printf("\t* [5] 插入职工记录 [6] 统计职工记录 *\n");printf("\t* [7] 排序 [8] 保存职工信息 *\n");printf("\t* [9] 显示数据 [0] 退出系统*\n");printf("\t* *\n");printf("\t****************************************************** ***********\n");} //void menu菜单结束void Disp(Link l) //显示单链表l中存储的职工记录,内容为employee结构中定义的内容{int count=0;Node *p;p=l->next; // l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息if(!p) /*p==NULL,NUll在stdlib中定义为0*/{printf("\n=====>提示:没有职工记录可以显示!\n");return;}printf("\t\t\t\t显示结果\n");。

c语言-职工信息管理系统

c语言-职工信息管理系统

1.设计目的设计目的是:1) 为了能够方便的对职工的信息进行管理,对职工信息进行输入、排序、查找、删除、修改等功能的实现。

2) 基本掌握面向过程程序设计的基本思路和方法,达到熟练掌握C语言的基本知识和技能,能够利用所学的基本知识和技能,解决简单的程序设计问题。

3) 培养了上机动手能力,使学生巩固《C语言程序设计》课程学习的内容,掌握如何使用面向过程的计算机语言进行程序设计的基本方法,强化上机动手能力,闯过编程关,为后续各门计算机课程的学习打下坚实基础。

2.总体设计该系统包括数据录入、排序、删除、查询、修改等功能模块,每个模块在程序系统中用一个函数来实现,系统总体框图如图1所示。

图1 系统框图3.详细设计1)结构体数组struct staff:建立结构体数组来存放职工号、姓名、年龄、学历等;2)数据输出函数output:输出所输入的数据;3)数据输入函数intput:输入相关的数据;4)修改函数modify:对职工信息进行修改,然后输出;5)查询函数search:输入一个工号,输出其信息;6)删除函数delete:按输入的工号删除该职工,然后输出剩余职工的信息;7)主函数main:编辑出菜单,对各个函数进行调用,实现各项功能;4.程序调试程序调试正常。

5.源程序清单(1)源程序:#include<stdio.h>struct staff{char name[8];char num[10];char sex[10];char age[10];char record[10];char position[15];char wanges[10];char tel[15];char addr[50];}worker; /*定义一个结构体*/char filename[20]; /*文件名*/ FILE *fp;void creat(); /*定义一个创建函数*/void output(); /*定义一个输出信息的函数*/ void search(); /*定义一个查询的函数*/void append(); /*定义一个添加函数*/void modify(); /*定义一个修改函数*/void delete(); /*定义一个删除函数*/void exit();/*定义一个输出函数*/void main() /*主函数*/{int m;creat(); /*先调用creat函数*/while(1){printf("\n\n添加,请按1");printf("\n查找,请按2");printf("\n修改,请按3");printf("\n删除,请按4");printf("\n输出,请按5");printf("\n退出,请按0\n"); /*输出提示信息*/ scanf("%d",&m);if(m>=0&&m<=5){switch(m){case 1: append();break;case 2: search();break;case 3: modify();break;case 4: delete();break;case 5: output();break;case 0: exit();}printf("\n\n操作完毕,请再次选择!");}elseprintf("\n\n选择错误,请再次选择!");}}void creat() /*被调用的creat函数*/{struct staff one;printf(" ———————《职工信息管理系统》———————");printf("∣☆☆管理工程系电子商务专业☆☆∣");printf("∣→☆☆☆Maxwei☆☆☆←∣");printf(" -————————————————————————");printf("\n请输入保存员工信息的文件名:");scanf("%s",filename); /*创建一个文件的名字*/if((fp=fopen(filename,"w"))==NULL) /*打开文件,实现向文件输入数据*/{printf("\n不能建立!");exit();}fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n","姓名","工号","性别","年龄","学历","职位","工资","电话号码","住址");printf("\n请输入职工信息(以0结束)\n");printf("姓名:\n");scanf("%s",);while(strcmp(,"0")){printf("工号:\n");scanf("%s",one.num);printf("性别:\n");scanf("%s",one.sex);printf("年龄:\n");scanf("%s",one.age);printf("学历:\n");scanf("%s",one.record);printf("职位:\n");scanf("%s",one.position);printf("工资:\n");scanf("%s",one.wanges);printf("电话:\n");scanf("%s",one.tel);printf("住址:\n");scanf("%s",one.addr); /*输出职工的相关信息*/fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",,one.num,one.sex,one.age,on e.record,one.position,one.wanges,one.tel,one.addr);scanf("%s",);}fclose(fp); /*关闭文件*/}void output() /*输出函数*/{struct staff one;if((fp=fopen(filename,"r"))==NULL) /*打开文件*/{printf("\n不能打开该文件!");exit();}printf("\n\n%20s\n","职工信息管理系统");/*向文件输入数据*/while(!feof(fp)){fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",,one.num,one.sex,one.age,one.record,one.position,o ne.wanges,one.tel,one.addr);printf("%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",,one.num,one.sex,one.age,one.re cord,one.position,one.wanges,one.tel,one.addr);}fclose(fp);/*关闭文件*/}void append() /*添加函数*/{struct staff one;if((fp=fopen(filename,"a"))==NULL) /*打开文件*/{printf("\n不能打开该文件!");exit();}printf("\n请输入添加职工信息(姓名、工号、性别、年龄、学历、职位、工资、电话、地址)\n");/*向文件中输入数据*/scanf("%s%s%s%s%s%s%s%s%s",,one.num,one.sex,one.age,one.record,one.position,one.wan ges,one.tel,one.addr);fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",,one.num,one.sex,one.age,on e.record,one.position,one.wanges,one.tel,one.addr);fclose(fp); /*关闭文件*/}void search() /*查询函数*/{int k=0;char namekey[8];struct staff one;printf("\n请输入您要查找的职工姓名:");scanf("%s",namekey);if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/{printf("\n不能打开文件!");exit();}while(!feof(fp)){fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",,one.num,one.sex,one.age,one.record,one.position,o ne.wanges,one.tel,one.addr);if(!strcmp(namekey,)){printf("\n\n已查到,记录为:");printf("\n%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",,one.num,one.sex,one.age,one. record,one.position,one.wanges,one.tel,one.addr);k=1;}}if(!k)printf("\n\n对不起,查无此人!。

C语言课程设计报告:职工信息管理系统程序设计

C语言课程设计报告:职工信息管理系统程序设计

1.课程论文题目职工信息管理系统程序设计一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。

试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。

(2)职工信息录入功能(职工信息用文件保存)。

(3)职工浏览功能。

(4)职工信息查询功能,查询方式可按学历查询或者工号查询。

(5)职工信息的删除、修改功能(可选项)。

2.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。

3.功能模块图5.算法设计1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。

2浏览模块【分析】该模块的功能是浏览职工的全部信息3排序模块4查询模块【分析】该模块的功能是根据输入的职工按照工号和学历查找对应的记录,找到以后,可进行继续查找或修改信息的操作。

流程图如下:5修改模块【分析】该模块的功能是显示所有职工的信息,考虑到记录较多,建议采用分屏显示。

显示完所有记录后,输入要修改的职工的工号,根据工号查到职工的记录,并提示用户修改该记录的哪部分信息,根据用户做的选择修改相应信息。

流程图如下:6.程序代码#include<stdio.h>#define N 50struct worker{char id[50];char name[20];char sex[10];char age[10];char edu[20];char salary[10];char address[20];char tel[20];}worker[N];void save(int n) //保存函数,保存n个记录{ FILE *fp;int i;if((fp=fopen("worker.txt","wb"))==NULL) //以只写方式为输出打开一个二进制文件{ printf("\nCannot open file\n");}for(i=0;i<n;i++)if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() //加载函数{ FILE *fp;int i;if((fp=fopen("worker.txt","rb"))==NULL){printf("\nCannot open file\n");return NULL;}for(i=0;!feof(fp);i++)fread(&worker[i],sizeof(struct worker),1,fp);fclose(fp);return(i-1);}void no_input(int i,int n) //工号输入函数,i表示第i个职工的信息,n 表示比较到第n个职工{ int j,k,w1;do{w1=0;printf("工号:");scanf("%s",worker[i].id);for(j=0;worker[i].id[j]!='\0';j++)if(worker[i].id[j]<'0'||worker[i].id[j]>'9') //判断工号是否为数字{puts("请重新输入!\n");w1=1;break;}if(w1!=1)for(k=0;k<n;k++) //比较到第N个职工if(k!=i&&strcmp(worker[k].id,worker[i].id)==0) //判断职工号是否有雷同{puts("请重新输入!\n");w1=1;break;}}while(w1==1);}void input(int i) //输入一个记录的函数{ no_input(i,i);printf("姓名:");scanf("%s",worker[i].name);printf("性别:");scanf(" %s",&worker[i].sex);printf("年龄:");scanf("%s",&worker[i].age);printf("工资:");scanf("%s",worker[i].salary);printf("学历:");scanf("%s",&worker[i].edu);printf("住址:");scanf("%s",worker[i].address);printf("电话:");scanf("%s",worker[i].tel);}void printf_one(int i) //显示一个记录的函数{printf("%10s %10s %5s %5s %8s %6s %10s %10s\n",worker[i].id,worker[i].name,worker[i].sex,worker[i].age,worker[i].salary,worker[i].edu,worker[i].address,worker[i].tel); }void printf_back() //一个任务结束后选择是好似浏览还是返回{ int k,w;printf("\n\n\tSuccessful^-^.\n\n");printf("接下来做什么?\n\n\t1).浏览全部\t2).返回: [ ]\b\b");scanf("%d",&w);if(w==1)browse();else menu();}modify_data(int i,int n) //修改函数{ int c,w1;do{puts("\nmodify by=>\n\n 1).工号 2).姓名 3).性别 4).年龄 5).工资6).学历 7).地址 8).电话 9).取消");printf("请选择?:[ ]\b\b");scanf("%d",&c);if(c>9||c<1){puts("\nChoice error!please again!");getchar();}}while(c>9||c<1);do{switch(c){case 1:no_input(i,n);break;case 2:printf("name:");scanf("%s",worker[i].name);break;case 3:printf("sex:");scanf("%s",worker[i].sex);break;case 4:printf("age:");scanf("%s",worker[i].age);break;case 5:printf("salary:");scanf("%s",worker[i].salary);break;case 6:printf("edu:");scanf("%s",worker[i].edu);break;case 7:printf("address:");scanf("%s",worker[i].address);break;case 8:printf("tel:");scanf("%s",worker[i].tel);break;case 9:menu();break;}puts("\nNow:\n");printf_face();printf_one(i);printf("\n确定?\n\n\t1).是2).否,重新修改3).不保存退出[ ]\b\b");scanf("%d",&w1);if(w1==1)save(n);}while(w1==2);return(w1);}printf_face() //显示数据结构项目{ printf("\n\t工号姓名性别年龄工资学历地址电话号码\n"); }void enter() //输入模块{ int i,n;printf("输入多少个职工信息(0-%d):",N-1);scanf("%d",&n);printf("\n 请输入职工信息\n\n");for(i=0;i<n;i++)input(i);if(i!=0)save(n);printf_back();}browse() //浏览模块{ int i,j,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\n按任意键显示下一页...");getch();puts("\n\n");}printf_one(i);}printf("\t这里有 %d 条记录.\n",n);printf("\n按任意键返回...");getch();menu();}modify() //修改模块{struct worker s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) //目的是分屏显示{printf("\n\n记住要修改的工号.按任意键显示下一页");getch();puts("\n\n");}printf_one(i); //调用显示一个记录的函数}do{printf("\n\n输入要修改的职工工号! 工号:");scanf("%s",s.id); //输入要修改的IDfor(i=0;i<n;i++) //查找要修改的数据if(strcmp(s.id,worker[i].id)==0){k=i; //找到要修改的记录s=worker[i]; //把worker[i]备份,以便恢复}if(k==-1)printf("\n\n未找到请重输");}while(k==-1); //当k=-1表示没有找到printf_face(); //调用显示数据结构项目的函数printf_one(k); //调用显示一个记录的函数w1=modify_data(k,n); //修改记录并返回保存控制值w1,w1=1表示用户已确认修改if(w1==1){printf("\Successful^_^.\n\n修改另一个?\n\n\t1).是 2).否,保存退出\t[ ]\b\b");scanf("%d",&w0);w2=1; //用来控制保存,使w2=1是标记已有过修改}else{w0=0;if(w2==1)worker[k]=s;}if(w0!=1&&w2==1)save(n);}while(w0==1);menu();}search() //查询模块{ int c,w1;do{puts("\nsearch by=>\n\n1).工号 2}.学历 3).取消并返回"); printf("Which you needed?:[ ]\b\b");scanf("%d",&c);if(c>3||c<1){ puts("\nchoice error!please again!");getchar();}}while(c>3||c<1);{switch(c){case 1:search1();break;case 2:search2();break;case 3:menu();break;}}}search1() //按工号查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n输入要查询的工号! id:");scanf("%s",s.id);printf_face();for(i=0;i<n;i++)if(strcmp(s.id,worker[i].id)==0){k=i;printf_one(k);break;}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search1();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}search2() //按学历查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n请输入你要查询的学历:\n");scanf("%s",);printf_face();for(i=0;i<n;i++)if(strcmp(,worker[i].edu)==0){k=i;printf_one(k);}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search2();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}menu(){int n,w1;do{puts("\t\t*******************菜单*******************\n\n");puts("\t\t\t\t1.录入职工信息");puts("\t\t\t\t2.浏览职工信息");puts("\t\t\t\t3.查询职工信息");puts("\t\t\t\t4.修改职工信息");puts("\t\t\t\t5.退出");puts("\t\t****************************************\n\n");printf("请选择(1~5): [ ]\b\b");scanf("%d",&n);if(n<1||n>5) //对选择的数字作判断{w1=1;getchar();}else w1=0;} while(w1==1);switch(n){case 1:enter();break; //录入 case 2:browse();break; //浏览 case 3:search();break; //查询 case 4:modify();break; //修改 case 5:exit(0); //退出}}main(){menu();}7.程序运行结果下面是各个模块的的界面截图(1)、主菜单(2)、输入模块(3)、浏览模块(3)、查找模块(4)、修改模块8.编程中遇到的困难及解决方法温故而知新,可以为师矣。

C语言课程设计——职工管理程序(链表实现)

C语言课程设计——职工管理程序(链表实现)

/********************************头文件调用*********************************************/#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"/********************************结构体声明*********************************************//********************************职工信息结构体*****************************************/struct Employee; //职工信息结构体声明typedef struct Employee *PtrToNode; //结构体指针定义typedef PtrToNode List; //链表头指针定义typedef PtrToNode Position; //链表结点指针定义/********************************职称结构体*****************************************/struct Title; //职称结构体声明typedef struct Title *PtrToTitle; //结构体指针定义/********************************函数声明************************************************//********************************链表函数声明********************************************/List MakeEmpty(List L); //空链表创建函数int IsEmpty(List L); //判断空链表函数int IsLast(Position P,List L); //判断链尾函数void DeleteList(List L); //链表删除函数Position FindNumPrevious(int number,List L); //职工号前驱指针查找函数Position FindNamePrevious(char name[],List L); //职工姓名前驱指针查找函数List Sort(List L); //链表冒泡排序函数PtrToTitle MakeEmptyTitle(PtrToTitle L1); //空职称链表创建函数PtrToTitle InsertTitle(char t[20],PtrToTitle L1); //职称插入函数/********************************文件函数声明********************************************/List Init(List L); //初始化函数void Save(List L); //信息保存函数void MakeFileEmpty(); //清空文件函数/********************************菜单函数声明********************************************/void MainMeun(); //主菜单void ViewMeun(); //显示菜单void EmployeeMeun(); //职工信息显示菜单void ModMeun(); //修改菜单void ModMeun1(); //修改的部分菜单void ModMeun(); //删除菜单/********************************职工管理函数声明********************************************/void Add(List L); //信息录入函数void View(List L); //信息显示函数void ViewNum(List L); //职工号显示函数void ViewName(List L); //职工号显示函数void ViewEmployee(List L); //职工信息显示函数void ViewDepartment(List L); //部门信息显示函数void ViewTime(List L); //入厂时间显示函数void Mod(List L); //信息修改函数void Mod1(Position P,List L); //修改的部分函数void ModNum(Position P,List L); //职工号修改函数void ModName(Position P,List L); //职工姓名修改函数void ModDepartment(Position P,List L); //工作部门修改函数void ModTitle(Position P,List L); //职工职称修改函数void ModTime(Position P,List L); //入厂时间修改函数void Modmoney(Position P,List L); //职工工资修改函数void Delete(List L); //职工号删除函数void DeleteNum(List L); //职工号删除函数void DeleteName(List L); //职工姓名删除函数void PrintEmployee(Position P); //职工信息打印函数void TurnBack(); //返回上一菜单函数char Test1(char a,char b,char c); //菜单输入检测函数/*********************************结构体定义***********************************************///职工信息结构体struct Employee{int num; //职工号char name[20]; //姓名char department[20]; //工作部门char Title[20]; //职称char time[10]; //入厂时间年/月/日 2018/6/29int money; //工资Position Next; //Next指针 (指向下一结构体)};//职称结构体struct Title{char title[20]; //职称名称int num; //部门职称人数struct Title* Next; //Next指针};/*********************************函数定义**************************************************//*********************************主函数**************************************************/int main(){List L=NULL;char a;L=Init(L);printf("\n\t\t输入回车键继续");getchar();while(1){system("cls"); //实现清屏MainMeun(); //调用主菜单显示函数fflush(stdin); //清除键盘缓冲区a=Test1(getchar(),'1','7'); //菜单输入检测函数switch(a){case '1': system("cls"); Add(L); break; //调用信息录入函数case '2': system("cls"); View(L); break; //调用信息显示函数case '3': system("cls"); Mod(L); break; //调用信息修改函数case '4': system("cls"); Delete(L); break; //调用信息删除函数case '5': system("cls"); Save(L); system("pause"); break; //调用信息保存函数case '6': system("cls"); MakeFileEmpty(); break; //调用信息删除函数case '7': return 0; //退出系统}}return 0;}/*********************************链表函数**********************************************///空链表创建函数List MakeEmpty(List L){if(L) //相当于 if(L!=NULL) ,即指针L指向的空间不为空DeleteList( L ); //删除原先链表L=(List)malloc(sizeof(struct Employee)); //创建新的空链表if(!L) //相当于 if(L==NULL) ,即指针L指向的空间为空{printf("创建失败,内存不足!!!"); //创建失败,提示内存不足system("pause"); //暂停屏幕显示return NULL; //返回上一级菜单}L->Next=NULL; //Next指针指向空return L; //返回链表头}//空职称链表创建函数struct Title *MakeEmptyTitle(struct Title *L1){if(L1) //相当于 if(L!=NULL) ,即指针L指向的空间不为空{struct Title *P;P=L1->Next; //取链表头后的所有结点L1->Next=NULL; //链表头指向空结点while(P!=NULL) //依次释放链表头后所有结点的空间{free(P);P=P->Next;}}L1=(struct Title *)malloc(sizeof(struct Title)); //创建新的空链表if(!L1) //相当于 if(L==NULL) ,即指针L指向的空间为空{printf("创建失败,内存不足!!!"); //创建失败,提示内存不足system("pause"); //暂停屏幕显示return NULL; //返回上一级菜单}L1->Next=NULL; //Next指针指向空return L1; //返回链表头}//职称插入函数PtrToTitle InsertTitle(char t[20],PtrToTitle L1){PtrToTitle P,TmpCell;if(L1->Next==NULL) //如果职称链表为空,则直接创建结点{TmpCell=(PtrToTitle)malloc(sizeof(struct Title));if(TmpCell==NULL)printf("\n超出空间!!!\n\n");else //将新建结点插入链表{strcpy(TmpCell->title,t);TmpCell->Next=L1->Next;L1->Next=TmpCell;TmpCell->num=1;}}else{P=L1->Next;while(P!=NULL&&strcmp(P->title,t)!=0)P=P->Next;if(P==NULL){TmpCell=(PtrToTitle)malloc(sizeof(struct Title));if(TmpCell==NULL)printf("\n超出空间!!!\n\n");else //将新建结点插入链表{strcpy(TmpCell->title,t);TmpCell->Next=L1->Next;L1->Next=TmpCell;TmpCell->num=1;}}elseP->num++;}return L1;}//判断空链表函数int IsEmpty(List L){return L->Next==NULL; //头结点的Next指针为空,则链表为空,返回值为1 }//判断链尾函数int IsLast(Position P,List L){return P->Next==NULL; //结点P的Next指针为空,则P为最后一个结点,返回值为1}//链表删除函数void DeleteList(List L){Position P;P=L->Next; //取链表头后的所有结点L->Next=NULL; //链表头指向空结点while(P!=NULL) //依次释放链表头后所有结点的空间{free(P);P=P->Next;}}//职工号前驱指针查找函数Position FindNumPrevious(int number,List L){Position P;P=L;while(P->Next!=NULL&&P->Next->num!=number) //判断P的Next指针是否为空,且P 的下一个结点的职工号是否为查找的职工号P=P->Next; //查找下一个return P; //返回该职工号的前驱指针}//职工姓名前驱指针查找函数Position FindNamePrevious(char name[],List L){Position P;P=L;while(P->Next!=NULL&&strcmp(name,P->Next->name)!=0) //判断P的Next指针是否为空,且P的下一个结点的职工姓名是否为查找的职工姓名P=P->Next; //查找下一个return P; //返回该职工号的前驱指针}//链表冒泡排序函数List Sort(List L){Position P,Tmp1,Tmp2;int i,j,num=0;P=L->Next;while(P!=NULL) //获取总人数{num++;P=P->Next;}for(j=0;j<num-1;j++) //通过总人数控制循环{P=L;Tmp1=P->Next;Tmp2=Tmp1->Next;for(i=0;i<num-1-j;i++){if(Tmp1->num>Tmp2->num) //升序{Tmp1->Next=Tmp2->Next;P->Next=Tmp2;Tmp2->Next=Tmp1;}P=P->Next;Tmp1=P->Next;Tmp2=Tmp1->Next;}}return L;}/*********************************文件函数**************************************************///初始化函数List Init(List L){FILE *fp; //文件指针Position TmpCell;int num=0;if((fp=fopen("职工信息.txt","r+"))==NULL) //打开"职工信息.txt"文本文件{printf("\n\t\t无法打开文件或文件不存在\n"); //提示错误printf("\n\t\t正在尝试创建新文件....\n");fp=fopen("职工信息.txt","w"); //创建"职工信息.txt"文本文件if((fp=fopen("职工信息.txt","r+"))==NULL) //再次打开判断是否成功{printf("\t\t文件创建失败!!!\n");system("pause"); //暂停屏幕显示return NULL;}}fp=fopen("职工信息.txt","r+"); //以只读的方式打开"职工信息.txt"文本文件L=MakeEmpty(L); //创建链表,以便存储文本文件中的信息while(1) //将磁盘中的信息输出到内存中{TmpCell=(Position)malloc(sizeof(struct Employee)); //创建新结点if(TmpCell==NULL){printf("文件信息读取失败,系统内存不足!!!\n"); //添加失败,提示内存不足system("pause"); //暂停屏幕显示return NULL; //返回上一级菜单if(fscanf(fp,"%d %s %s %s %s %d",&TmpCell->num,TmpCell->name,TmpCell->depa rtment,TmpCell->Title,TmpCell->time,&TmpCell->money)<0)break; //将文件信息写入内存TmpCell->Next=L->Next; //将结点TmpCell插入到链表中L->Next=TmpCell;num++;}printf("\n\t\t职工信息读取完成!!!\n");printf("\n\t\t目前共有 %d 名职工信息\n",num);fclose(fp); //关闭文件return L;}//信息保存函数void Save(List L){FILE *fp; //文件指针Position P;L=Sort(L); //调用链表冒泡排序函数P=L;if((fp=fopen("职工信息.txt","w+"))==NULL) //打开"职工信息.txt"文本文件{printf("无法打开文件!!!\n");system("pause"); //暂停屏幕显示return;}fp=fopen("职工信息.txt","w+"); //以读写的方式打开"职工信息.txt"文本文件while(P->Next!=NULL) //将内存中的数据输出到磁盘中{P=P->Next; //信息从第一个有效结点开始保存,循环指向下一个有效结点if(fprintf(fp,"%d %s %s %s %s %d\n",P->num,P->name,P->department,P->Title, P->time,P->money)<0)break; //向文件写入信息}printf("\n职工信息保存成功!!!\n\n");fclose(fp);}//清空文件函数void MakeFileEmpty(){FILE *fp; //文件指针if((fp=fopen("职工信息.txt","w+"))==NULL) //新建"职工信息.txt"文本文件{printf("无法打开文件!!!\n");system("pause"); //暂停屏幕显示return;}printf("\n文件信息清空完毕!!!\n\n");TurnBack();return;}/*********************************菜单函数**************************************************///主菜单void MainMeun(){printf("\n\t\t 主菜单");printf("\n\t\t*******************************************");printf("\n\t\t* 1、信息录入 *");printf("\n\t\t* 2、信息显示 *");printf("\n\t\t* 3、信息修改 *");printf("\n\t\t* 4、信息删除 *");printf("\n\t\t* 5、信息保存 *");printf("\n\t\t* 6、信息清空 *");printf("\n\t\t* 7、退出系统 *");printf("\n\t\t*******************************************");printf("\n\n\t\t\t请输入您的选择:");}//显示菜单void ViewMeun(){printf("\n\t\t 显示菜单");printf("\n\t\t********************************************");printf("\n\t\t* 1、职工信息显示 *");printf("\n\t\t* 2、部门信息显示 *");printf("\n\t\t* 3、入厂时间显示 *");printf("\n\t\t* 4、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t\t请输入您的选择:");}//职工信息显示菜单void EmployeeMeun(){printf("\n\t\t 职工信息显示菜单");printf("\n\t\t********************************************");printf("\n\t\t* 1、职工号查询 *");printf("\n\t\t* 2、职工姓名查询 *");printf("\n\t\t* 3、返回显示菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t\t请输入您的选择:");}//修改菜单void ModMeun(){printf("\n\t\t 修改菜单");printf("\n\t\t********************************************");printf("\n\t\t* 1、职工号查询修改 *");printf("\n\t\t* 2、职工姓名查询修改 *");printf("\n\t\t* 3、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t\t请输入您的选择:");}//修改的部分菜单void ModMeun1(){printf("\n\t\t 所要修改的部分");printf("\n\t\t********************************************");printf("\n\t\t* 1、职工号 *");printf("\n\t\t* 2、职工姓名 *");printf("\n\t\t* 3、工作部门 *");printf("\n\t\t* 4、职称 *");printf("\n\t\t* 5、入厂时间 *");printf("\n\t\t* 6、工资 *");printf("\n\t\t* 7、返回上一菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t\t请输入您的选择:");}//删除菜单void DeleteMeun(){printf("\n\t\t 删除菜单");printf("\n\t\t********************************************");printf("\n\t\t* 1、职工号查询删除 *");printf("\n\t\t* 2、职工姓名查询删除 *");printf("\n\t\t* 3、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t\t请输入您的选择:");}/*********************************职工管理函数**************************************************//*********************************录入函数**********************************************///信息录入函数void Add(List L){Position TmpCell;int number;char n[20];printf("\n请输入所要创建的职工号: "); //提示输入职工号scanf("%d",&number);if(!IsLast(FindNumPrevious(number,L),L)) //连续调用职工号前驱指针查找函数判断链尾函数,判断该职工号是否已存在{printf("\n职工号 %d 已存在!!!\n\n",number);TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}printf("\n请输入该职工的姓名: "); //保存职工姓名scanf("%s",n);if(!IsLast(FindNamePrevious(n,L),L)) //连续调用职工姓名前驱指针查找函数判断链尾函数,判断该职工姓名是否已存在{printf("\n职工姓名 %s 已存在!!!\n\n",n);TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}TmpCell=(Position)malloc(sizeof(struct Employee)); //创建新结点if(TmpCell==NULL){printf("\n添加失败,内存不足!!!\n\n"); //添加失败,提示内存不足system("pause"); //暂停屏幕显示return; //返回上一级菜单}TmpCell->num=number; //保存职工号strcpy(TmpCell->name,n); //保存姓名printf("\n请输入该职工的工作部门: "); //保存工作部门scanf("%s",TmpCell->department);printf("\n请输入该职工的职称: "); //保存职称scanf("%s",TmpCell->Title);printf("\n请输入该职工的入厂时间(格式为:年/月/日): "); //保存入厂时间scanf("%s",TmpCell->time);printf("\n请输入该职工的工资(单位:元): "); //保存工资scanf("%d",&TmpCell->money);TmpCell->Next=L->Next; //将结点TmpCell插入到链表中L->Next=TmpCell;printf("\n职工 %s 的信息创建成功!!!\n",TmpCell->name); //提示创建成功Save(L); //调用信息保存函数TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}/*********************************显示函数**********************************************///信息显示函数void View(List L){while(1){char a;system("cls"); //实现清屏ViewMeun(); //调用显示菜单fflush(stdin); //清除键盘缓冲区a=Test1(getchar(),'1','4'); //调用菜单输入检测函数switch(a){case '1': system("cls"); ViewEmployee(L); break; //职工信息显示case '2': system("cls"); ViewDepartment(L); break; //部门信息显示case '3': system("cls"); ViewTime(L); break; //入厂时间显示case '4': return;}}}//职工信息显示函数void ViewEmployee(List L){while(1){char a;system("cls"); //实现清屏EmployeeMeun(); //调用职工信息显示菜单fflush(stdin); //清除键盘缓冲区a=Test1(getchar(),'1','3'); //调用菜单输入检测函数switch(a){case '1': system("cls"); ViewNum(L); break; //职工信息显示case '2': system("cls"); ViewName(L); break; //部门信息显示case '3': return;}}}//职工号显示函数void ViewNum(List L){Position P;int number;printf("\n请输入所要查询的职工号: ");scanf("%d",&number);P=FindNumPrevious(number,L); //调用职工号前驱指针查找函数,获得所需显示结点的前一结点if(IsLast(P,L)==1) //判断是否存在该员工printf("\n无职工号为 %d 的员工!!!\n\n",number);elsePrintEmployee(P->Next); //调用职工信息打印函数TurnBack(); //调用返回上一菜单函数return; //返回上一菜单}//职工姓名显示函数void ViewName(List L){Position P;char name[20];printf("请输入所要查询的职工姓名: ");scanf("%s",name);P=FindNamePrevious(name,L); //调用职工号前驱指针查找函数,获得所需显示结点的前一结点if(IsLast(P,L)) //判断是否存在该员工printf("\n无姓名为 %s 的员工!!!\n\n",name);elsePrintEmployee(P->Next); //调用职工信息打印函数TurnBack(); //调用返回上一菜单函数return; //返回上一菜单}//部门信息显示函数void ViewDepartment(List L){Position P;PtrToTitle P1,L1;char c[20];int num,money;L1=NULL;L1=MakeEmptyTitle(L1); //调用职称链表创建函数num=money=0;printf("请输入所要查询的部门名称: ");scanf("%s",c);P=L->Next;while(P!=NULL&&strcmp(c,P->department)!=0)P=P->Next;if(P==NULL){printf("\n无名称为 %s 的部门\n\n",c);TurnBack(); //调用返回上一菜单函数return;}printf("\n该部门职工信息如下:\n");printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");printf(" 职工号姓名工作部门职称入厂时间工资 \n");printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");P=L->Next;while(P!=NULL){if(strcmp(c,P->department)==0){printf(" %-d\t\t%-s\t\t%-s\t\t%-s\t\t%-s\t\t%-d\n",P->num,P->name,P->dep artment,P->Title,P->time,P->money);L1=InsertTitle(P->Title,L1);num++;money+=P->money;}P=P->Next;}printf("\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");printf("该部门的统计情况如下:\n 总人数为: %d 人\n 平均工资为: %.2f 元\n",num,(float)money/num);P1=L1->Next;while(P1!=NULL){printf(" 职称为 %s 的共: %d 人\n",P1->title,P1->num);P1=P1->Next;}putchar('\n');TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//入厂时间显示函数void ViewTime(List L){Position P;char time[20];printf("请输入所要查询的入厂时间: ");scanf("%s",time);P=L->Next;while(P!=NULL&&strcmp(time,P->time)!=0)P=P->Next;if(P==NULL){printf("无入厂时间为 %s 的员工\n\n",time);TurnBack(); //调用返回上一菜单函数return;}printf("\n该部门职工信息如下:\n");printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");printf(" 职工号姓名工作部门职称入厂时间工资 \n");printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");P=L->Next;while(P!=NULL){if(strcmp(time,P->time)==0)printf(" %-d\t\t%-s\t\t%-s\t\t%-s\t\t%-s\t\t%-d\n",P->num,P->name,P->dep artment,P->Title,P->time,P->money);P=P->Next;}printf("\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");TurnBack(); //调用返回上一菜单函数return;}/*********************************修改函数**********************************************///信息修改函数void Mod(List L){while(1){char a;Position P;system("cls"); //实现清屏ModMeun(); //调用修改菜单fflush(stdin); //清除键盘缓冲区a=Test1(getchar(),'1','3'); //调用菜单输入检测函数switch(a){case '1': //职工号修改{int number;system("cls");printf("\n请输入所要修改的职工信息的职工号: ");scanf("%d",&number);P=FindNumPrevious(number,L); //调用职工号前驱指针查找函数,获得所需显示结点的前一结点if(IsLast(P,L)==1) //判断是否存在该员工{printf("\n无职工号为 %d 的员工!!!\n\n",number);TurnBack(); //调用返回上一菜单函数}elseMod1(P->Next,L); //调用修改的部分函数break; //返回上一菜单}case '2': //职工姓名修改{char name[20];printf("请输入所要修改的职工信息的职工姓名: ");scanf("%s",name);P=FindNamePrevious(name,L); //调用职工号前驱指针查找函数,获得所需显示结点的前一结点if(IsLast(P,L)) //判断是否存在该员工{printf("\n无姓名为 %s 的员工!!!\n\n",name);TurnBack(); //调用返回上一菜单函数}elseMod1(P->Next,L);break; //返回上一菜单}case '3': return;}}}//修改的部分函数void Mod1(Position P,List L){while(1){char a;PrintEmployee(P); //调用职工信息打印函数ModMeun1(); //调用修改菜单fflush(stdin); //清除键盘缓冲区a=Test1(getchar(),'1','7'); //调用菜单输入检测函数switch(a){case '1': system("cls"); ModNum(P,L); break; //职工号修改case '2': system("cls"); ModName(P,L); break; //职工姓名修改case '3': system("cls"); ModDepartment(P,L); break; //工作部门修改case '4': system("cls"); ModTitle(P,L); break; //职工职称修改case '5': system("cls"); ModTime(P,L); break; //入厂时间修改case '6': system("cls"); Modmoney(P,L); break; //职工工资修改case '7': return;}}}//职工号修改函数void ModNum(Position P,List L){int b;printf("\n请输入新的职工号: ");scanf("%d",&b);if(!IsLast(FindNumPrevious(b,L),L)) //连续调用职工号前驱指针查找函数判断链尾函数,判断该职工号是否已存在printf("\n职工号 %d 已存在!!!\n\n",b);else{P->num=b;Save(L); //调用信息保存函数}TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//职工姓名修改函数void ModName(Position P,List L){char c[20];printf("\n请输入新的职工姓名: ");scanf("%s",c);if(!IsLast(FindNamePrevious(c,L),L)) //连续调用职工姓名前驱指针查找函数判断链尾函数,判断该职工姓名是否已存在printf("\n职工姓名 %s 已存在!!!\n\n",c);else{strcpy(P->name,c);Save(L); //调用信息保存函数}TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//工作部门修改函数void ModDepartment(Position P,List L){char c[20];printf("\n请输入新的工作部门: ");scanf("%s",c);strcpy(P->department,c);Save(L); //调用信息保存函数TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//职工职称修改函数void ModTitle(Position P,List L){char c[20];printf("\n请输入新的职工职称: ");scanf("%s",c);strcpy(P->Title,c);Save(L); //调用信息保存函数TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//入厂时间修改函数void ModTime(Position P,List L){char c[20];printf("\n请输入新的入厂时间(格式为:年/月/日): ");scanf("%s",c);strcpy(P->time,c);Save(L); //调用信息保存函数TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//职工工资修改函数void Modmoney(Position P,List L){int b;printf("\n请输入新的职工工资(单位:元): ");scanf("%d",&b);P->money=b;Save(L); //调用信息保存函数TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}/*********************************删除函数**********************************************///删除函数void Delete(List L){while(1){char a;system("cls"); //实现清屏DeleteMeun(); //调用删除菜单fflush(stdin); //清除键盘缓冲区a=Test1(getchar(),'1','3'); //调用菜单输入检测函数switch(a){case '1': system("cls"); DeleteNum(L); break; //职工号删除case '2': system("cls"); DeleteName(L); break; //职工姓名删除case '3': return;}}}//职工号删除函数void DeleteNum(List L){Position P,TmpCell;int number;printf("\n请输入所要修改的职工信息的职工号: ");scanf("%d",&number);P=FindNumPrevious(number,L); //调用职工号前驱指针查找函数,获得所需显示结点的前一结点if(IsLast(P,L)==1) //判断是否存在该员工printf("\n无职工号为 %d 的员工!!!\n\n删除失败!!!\n\n",number);else{PrintEmployee(P->Next); //调用职工信息打印函数fflush(stdin); //清除键盘缓冲区printf("\n是否确认要删除?回复'Y'/'N'\n");if(getchar()=='Y'){TmpCell=P->Next;P->Next=TmpCell->Next;free(TmpCell);printf("\n删除成功!!!\n\n");Save(L); //调用信息保存函数}}TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}//职工姓名删除函数void DeleteName(List L){Position P,TmpCell;char name[20];printf("请输入所要查询的职工姓名: ");scanf("%s",name);P=FindNamePrevious(name,L); //调用职工号前驱指针查找函数,获得所需显示结点的前一结点if(IsLast(P,L)) //判断是否存在该员工printf("\n无姓名为 %s 的员工!!!\n\n删除失败!!!\n\n",name);else{PrintEmployee(P->Next); //调用职工信息打印函数fflush(stdin); //清除键盘缓冲区printf("\n是否确认要删除?回复'Y'/'N'\n");if(getchar()=='Y'){TmpCell=P->Next;P->Next=TmpCell->Next;free(TmpCell);printf("\n删除成功!!!\n\n");Save(L); //调用信息保存函数}}TurnBack(); //调用返回上一菜单函数return; //退出并返回上一级菜单}/*********************************打印函数**********************************************///职工信息打印函数void PrintEmployee(Position P){printf("\n该职工信息如下:\n");printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");printf(" 职工号姓名工作部门职称入厂时间工资\n");printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");printf(" %-d\t %-s %-s %-s\t%-s %-d\n",P->num,P->name,P->department,P->Title,P->time,P->money);printf("\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");}/*********************************检测函数**********************************************///菜单输入检测函数char Test1(char a,char b,char c){while(a<b||a>c){printf("\n\t\t\t输入错误,请重新输入: ");fflush(stdin); //清除键盘缓冲区a=getchar();}return a;}//返回上一菜单函数void TurnBack(){printf("按回车键返回上一菜单...");fflush(stdin); //清除键盘缓冲区getchar(); //读取任意按键值system("cls"); //实现清屏}。

C语言课程设计单项链表实现工资管理系统

C语言课程设计单项链表实现工资管理系统

高级语言(C语言)课程设计说明书起止日期:2012 年07 月2 日至2012 年07 月14 日题目工资管理系统学生姓名班级学号成绩通信与信息工程学院一.课程设计要求课程设计系统组成及模块功能:工资管理程序主要完成对职工的工资信息录入,然后进行排序,统计,查询,计算税金等功能操作。

具体要求如下:1. 职工录入工资信息包括:编号,姓名,基本工资,扣款,应发工资,税金,实发工资2.程序主菜单如下:"**************MENU*************", /*菜单的标题行*/0。

init list /*初始化单链表*/1。

Enter list /*输入数据,创建单链表*/2。

List all /*显示所有记录*/3。

Calc the salary /*计算实发工资*/4。

Search record on name /*查找职工信息数据*/5。

Delete a record /*删除记录*/6. Sort on sfgz /*按实发工资升序排序*/7。

Computer ticket number /*计算所需票面数*/8. Total on number /*分类合计*/9。

Quit /*退出*/3. 要求定义如下函数,对应菜单功能/******函数原型*********/void init(); /*单链表初始化*/void create(); /*创建单链表, 输入数据*/void calc(); /*计算实发工资*/void delete();/*删除*/void search(); /*查找*/void computer(); /*计算所需各种票面张数*/void sort();/*排序*/void list();/*显示所有数据*/void print(SALARY *p); /*输出单条记录*/float fax(float x); /*计算税金*/void total(); /*分类合计*/int menu_select();/*主菜单*/二.程序的功能设计此工资管理系统主要利用链表实现,由如下八个功能模块实现1、输入模块.主要完成输入工资信息的工作,并存入链表中.2、输出模块。

c语言单链表实现职工工资管理

c语言单链表实现职工工资管理

**************************************************************************** 职工工资管理小软件 ******************************************************************************* #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> /****************************************************************************** 职工变量定义 ******************************************************************************/ typedef struct employee ( /*数据域*/char sex[10]; 〃性别char age[10]; //年龄 char post[10];//岗位charEmployeeID[15];//工号char int name[10]; basesalary; postwage; totalwage;//姓名 //基本工资 //岗位工资 //总工资int float/*指针域*/struct employee *next;}LNode,*LinkList; /****************************************************************************** 全局变量定义 ******************************************************************************/ int iCount=0; int saveflag=0; /*是否需要存盘的标志变量 */ /***************************************************************************** 函数声明 ***************************************************************************** //登陆函数 //主菜单函数 void MainMenu(); int menu(); LinkList CreatLinkList(); void stringinput(char *t,int lens,char *notice); //职工信息创建函数〃字符长度判断函数函数void ShowLinkList(pHead);void OutOneNode(LinkList PNode);//职工信息输出函数 //输出一个节点的数据void SaveData(LinkList pHead);//职工信息导入函数 void author();//查询作者信息函数void back(); //返回上一界面函数 /*****************************************************************************系统主函数******************************************************************************/ void main() {int iChoice; for(;;) {system("cls"); printf("\n\n\n\n");printf(" 欢迎进入职工工资管理系统\n\n\n"); printf(" 1进入管理系统 \n\n"); printf(" 2查看作者信息 \n\n"); printf(" 0退出\n\n");printf(" \n\n\n\n");printf("请 输 入 您 的 选择 (0-2)\n");scanf("%d”,&iChoice);LinkList FindWorker(LinkList pHead); //职工信息查询函数void update(LinkList pHead); void sortList(LinkList pHead); //职工信息修改函数//职工工资排序函数LinkList FindWorker(LinkList pHead); LinkList Find_ByEmployeeID(LinkList pHead); //按职工姓名查找 //按职工工号查找LinkList LoadData(LinkList pHead); void UpdateInfo(); //职工信息更新函数 //职工信息保存函数while(iChoice<0||iChoice>2) { system("cls");printf("printf("printf("printf("printf(" printf(" printf(" printf("\n\n\n\n");您的输入有误!\n");请重新输入您的选择(0-2):\n");欢迎进入职工工资管理系统进入管理系统查看作者信息退出\n\n\n\n");\n\n\n");\n\n");\n\n");\n\n");scanf("%d”,&iChoice);}switch(iChoice){case 1:MainMenu();break;case 2:author();back();break;case 0:system("cls");printf(" printf(" printf(" exit(0);\n\n\n\n\n\n");谢谢使用!\n\n");\t 再见!\n\n\n\n");} fflush(stdin);getchar();system("cls");}}/***************************************************************************** 功能:登陆函数,进行密码验证*****************************************************************************/ void MainMenu(){char key[10],password[10]="123”;int iNum=1;LinkList pHead;printf(" 请输入密码: scanf("%s”,key);while(iNum<=3) //定义单链表结点指针\t");{if(strcmp(password,key)==0)while(1)(int iChoice;iChoice=menu();system("cls");switch(iChoice)(case 1:pHead=CreatLinkList();back();break;信息case 2:ShowLinkList(pHead);back();break;case 3:printf("\n\n\n\n");printf("\n\n\n\n\n");FindWorker(pHead);back();break; 信息case 4:update(pHead);back();break;添加case 5:printf("\n\n\n\n");printf("\n\n\n\n\n");update(pHead);back();break;修改case 6:SaveData(pHead);back();break;case 7:sortList(pHead);back();break;case 8://save(pHead);break;case 9:author();back();break;case 10://copy();break;case 11://pHead=load(pHead);break;case 0://创建职工//显示职工信息欢迎进入职工信息查询模块//查询职工〃职工信息欢迎进入职工信息修改模块〃职工信息//职工信息保存//职工信息//职工信息//职工信息//职工信息system("cls");printf("\n\n\n\n");printf(" 谢谢使用!\n\n");printf(" \t 再见!\n\n\n\n");//save();exit(0);}fflush(stdin);getchar();system("cls");}} else { iNum++; printf("\n 您是非法用户!请输入密码:\t");scanf("%s”,key); if(iNum>2) { if(strcmp(password,key)==0) continue; else {printf("\n 输入密码错误3次,系统将自动退出!\n\n");printf(" 欢迎下次使用!\n\n");exit(0);}}}}} /************************************************************************功能:主菜单函数,用于主显示菜单参数:iChoice类型:int说明:变量返回值:iChoice************************************************************************/ int menu(){int iChoice ;system("cls");printf("\n您是合法用户!"); printf("\n\n\n");printf("************************printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf("|\n");printf(" |***************** 欢迎进入职工工资管理系统||职工信息创建|职工信息浏览|职工信息查询|职工信息添加|职工信息修改|职工信息保存|职工信息删除|职工信息读取|职工工资排序|\n");printf(" | 10|\n");printf(" |\n");printf(" ||\n");printf(" |\n");printf(" |\n");printf("|*****************************************************************|虹,);printf("\n\n"); printf(-请输入你所选择的选项(0-9):");scanf("%d”,&iChoice);while(iChoice>12||iChoice<0) {printf(" printf(" scanf("%d",&iChoice); }return iChoice;}/*****************************************************************************功能:输入字符长度判断函数,判断输入字符长度是否超过原定长度*****************************************************************************/ void stringinput(char *t,int lens,char *notice) {char n[50]; do*************************************************************************** 功能:职工信息创建*****************************************************************************/ 〃创建一个链表,包含 n 个节点LinkList pHead; LinkList pNew,pTail; int i,iNum=0;pHead=(LinkList)malloc(sizeof(LNode));// 为头节点分配内存空间{ printf(notice); scanf("%s”,n);if(strlen(n) >(size_t)lens)printf("\n }while(strlen(n)>(size_t)lens); strcpy(t,n);//显示提示信息//输出字符串输入字符过长!");//超过lens 只重新输入〃将输入的字符串拷贝到字符串t 中职工工资统计|0 退出系统| |您的输入有误! \n"); 请重新输入你所选择的选项 (0-9):");/**LinkList CreatLinkList()if(pHead==NULL) (printf("分配空间失败!");exit(1);} elsepHead->next=NULL; 〃链表初始化system("cls"); printf(" \n\n\n\n");printf(" 欢迎进入职工信息创建模块\n\n\n\n\n");printf(" 请输入要添加职工的个数:\n ");scanf("%d”,&iNum); if(iNum>0) (/*利用for循环一次实现各节点的创建和数据的输入*/for(i=0;i<iNum;i++)(pNew=(LinkList)malloc(sizeof(LNode)); // 为后继节点分配内存空间if(pNew==NULL) (printf("分配空间失败!");exit(1);} else (printf(" \n\n");printf(" 请输入第%d个职工信息:\n\n",i+1);printf(" 提示:输入职工姓名为0则终止创建!\n\n");stringinput(pNew->name,10,"\n 请输入职工姓名:\t\t");if(strcmp(pNew->name,"0")==0)break;stringinput(pNew->post,10,"\n 请输入职工岗位:\t\t");stringinput(pNew->EmployeeID,15,"\n 请输入职工工号:\t\t");stringinput(pNew->sex,10,"\n 请输入职工性别:\t\t");stringinput(pNew->age,10,"\n 请输入职工年龄:\t\t");printf("\n请输入职工基本工资:\t");scanf("%d",&pNew->basesalary);printf("\n 请输入职工岗位工资:\t"); scanf("%d”,&pNew ->postwage); if(pHead->next==NULL) (pHead->next=pNew; pTail=pNew; iCount++;} else (pTail->next=pNew;pTail=pNew; iCount++;}/******************************************************************************功能:输出一个节点的数据********************************************************************************/void OutOneNode(LinkList pNew) (printf(" ---------------------------------------------------------------------------- \n"); printf(" | 姓名| 职工号| 性别| 年龄|任职岗位| 基本工资|岗位工资|\n");printf(" ---------------------------------------------------------------------------- \n"); printf(" |%9s|%10s|%7s|%5s|%10s|%10d| %10d|\n”,pNew ->name,pNew->EmployeeID,pNew->sex,pNew->age,pNew->post,pNew->basesalary,pNew->postwage);printf(" ---------------------------------------------------------------------------- \n"); printf("\n\n");//将pNew 链到链表中}}pTail->next=NULL; printf(" printf(" }printf(" printf("return pHead;当前共输入 //将链表的最后一个节点的指针域置空\n\n");%d 个职工信息 \n\n”,iCount);\n\n");职工信息创建完成!\n\n");*****************************************************************************功能:职工信息输出******************************************************************************* */ void ShowLinkList(LinkList pHead) (int iNum=0; LinkList pNew; pNew=pHead; system("cls"); printf(" \n\n\n\n\n");printf("欢迎进入职工信息浏览模块\n\n\n\n");if(pNew == NULL) (printf("\n 提示:没有记录可以显示!\n\n");return;}printf(" ---------------------------------------------------------------------------- \n"); printf(" | 姓名| 职工号| 性别| 年龄|任职岗位| 基本工资|岗位工资|\n");printf(" ---------------------------------------------------------------------------- \n"); for(pNew=pHead->next;pNew!=NULL;pNew=pNew->next) (printf("|%9s|%10s|%7s|%5s|%10s|%10d| %10d|\n”,pNew ->name,pNew->EmployeeID,pNew->sex,pNew->age,pNew->post,pNew->basesalary,pNew->postwage);printf(" ----------------------------------------------------------------------------- \n"); iNum++; }printf("\n\n printf("\n}/******************************************************************************功能:查找职工信息********************************************************************************/LinkList FindWorker(LinkList pHead) (LinkList perNode; char WorkNumber[15]; if(pHead->next == NULL) (printf(-当前没有职工信息..."); return NULL; }printf(-请输入工作者的工号或姓名:\n ");scanf("%s”,WorkNumber);职工信息输出完成! 当前共有%d 个职工!\n");\n\n\n",iNum);for(perNode = pHead->next ; perNode != NULL; perNode = perNode->next) if(strcmp(WorkNumber,perNode->EmployeeID) == 0) break;if (perNode != NULL){printf("\n 该职工信息如下:\n\n");OutOneNode(perNode);return perNode;}else{for(perNode = pHead->next ; perNode != NULL; perNode = perNode->next)if(strcmp(WorkNumber,perNode->name) == 0)break;if (perNode != NULL){printf("\n 该职工信息如下:\n\n");OutOneNode(perNode);return perNode;}printf(" 没有找到您要找的工人!\n\n");return NULL;}}/*****************************************功能:修改职工信息/*******************************************/void update(LinkList pHead){LNode *ptrWork = FindWorker(pHead);char type = 0;if (ptrWork != NULL){printf(" 请你输入你要修改的属性:\n");printf(" 1:姓名\n");printf(" 2:职工号\n");printf(" 3:性别\n");printf("\tscanf("%d",&type);} while (type > 7 || type < 0); switch (type) {case 1:stringinput(ptrWork->name,10,"\n\t 请输入职工姓名:\t\t");break; case 2:/************************************************************************//*对链表进行排序 /************************************************************************/ voidsortList(LinkList pHead) {LinkList seconde = pHead->next; //*pHead->next = NULL;LNode *perNode = pHead; // 指向前面一个结点 LNode *node = perNode->next; // 指向正在比较的这个节点 LNode * curNode;//是带插入的结点printf(" 4: 年龄\n");printf(" 5: 任职岗位\n"); printf(" 6: 基本工资\n"); printf(" 7: 岗位工资\n\n");do{stringinput(ptrWork->EmployeeID,15,"\n\t break; case 3:stringinput(ptrWork->sex,10,"\n\t break; case 4:stringinput(ptrWork->age,10,"\n\t break; case 5:请输入职工工号 请输入职工性别 请输入职工年龄 stringinput(ptrWork->post,10,"\n\t break; case 6:printf("\n\t 请输入职工基本工资 scanf("%d”,&ptrWork ->basesalary);break; case 7:printf("\n\t 请输入职工岗位工资:\t"); scanf("%d”,&ptrWork ->postwage); break;请输入职工岗位 :\t");:\t\t");:\t\t"); :\t\t");:\t\t");*/〃指向第一个结点请选择:\n");pHead->next = NULL;while (seconde != NULL)(curNode = seconde;seconde = seconde->next; //从链表里面读取一个结点curNode->next = NULL;if (pHead->next == NULL)(pHead->next = curNode;}else(for (perNode = pHead,node = perNode->next;node != NULL; node =node->next,perNode = perNode->next)(if ((node->postwage+node->basesalary) > (curNode->postwage+curNode->basesalary))(perNode->next = curNode;curNode->next = node;//perNode = curNode;break;}}if( node == NULL)(perNode->next = curNode;}}}}I****************************************************************************** *功能:把职工信息保存到文件********************************************************************************/void SaveData(LinkList pHead)(FILE *fp;LinkList pNew;char filename[20];system("cls");printf(" \n\n\n\n\n");printf(" 欢迎进入职工信息保存模块\n\n\n\n");printf(" 请输入文件的地址及文件名:\n");scanf("%s”,filename);if((fp=fopen(filename,"w"))==NULL)(printf(" 无法打开该文件!\n");return;}fprintf(fp," 目前共有%d 名学生信息:\n\n”,iCount);//fprintf(fp," ----------------------------------------------------------------------------- \n");fprintf(fp," | 姓名| 职工号| 性别| 年龄| 任职岗位| 基本工资| 岗位工资|\n");//fprintf(fp," ----------------------------------------------------------------------------- \n");for(pNew=pHead->next;pNew!=NULL;pNew=pNew->next)(fprintf(fp,"|%9s|%10s|%7s| %5s| %10s| %10d| %10d|\n”,pNew->name,pNew->EmployeeID,pNew->sex,pNew->age,pNew->post,pNew->basesalary,pNew->postwage);//fprintf(fp," ------------------------------------------------------------------------------ \n");}printf("\n\n职工信息保存成功!\n\n");fclose(fp);}/******************************************************************************功能:从文件读取职工信息*******************************************************************************LinkList LoadData(LinkList pHead)(FILE *fp;LinkList pNew,pTail;char filename[20];system("cls");printf(" \n\n\n\n\n");printf(" 欢迎进入职工信息导入模块\n\n\n\n");printf(" 请输入需加载的文件地址及文件名:\n");scanf("%s",filename);if((fp=fopen(filename,"r"))==NULL)( printf(- 无法打开该文件\n");exit(0); } fscanf(fp,"目前共有%d名学生信息:”,&iCount);*/ //for(i=0;i<7;i++) // fscanf(fp,”%s”,&secondline[i]); /*pHead=NULL; for(i=0;i<iCount;i++) ( pNew=(LinkList)malloc(sizeof(LNode)); fscanf(fp," |%9s|%10s|%7s| %5s| %10s|%10d| %10d|\n”,pNew->name,pNew->EmployeeID,pNew->sex,pNew->age,pNew->post,&pNew->basesalary,&pNew->postwage);pNew->next=NULL; if(pHead==NULL) ( pHead=pNew; pTail=pNew; } else ( pTail->next=pNew; pTail=pNew; } } while(!feof(fp)) ( pNew=(LinkList)malloc(sizeof(LNode)); if(!pNew) ( printf("\n 分配空间失败!系统将自动退出");〃如果没有分配到空间,打印提示信息printf("\n 谢谢使用!\n\n");exit(0); // 返回主菜单} fscanf(fp,"|%9s|%10s|%7s| %5s| %10s| %10d| %10d|\n”,pNew->name,pNew->Employe eID,pNew->sex,pNew->age,pNew->post,&pNew->basesalary,&pNew->postwage);pNew->next=NULL;if(pHead==NULL) (pHead=pNew; pTail=pNew; iCount++;}else (pTail->next=pNew;pTail=pNew; iCount++; } }fclose(fp); printf("\n\n return pHead; }*//*****************************************************************************功能:查询作者信息*****************************************************************************/ void author() (/*****************************************************************************功能:返回上一界面函数*****************************************************************************/ void back() (printf("\n\t\t\t ===> 按 Enter 键返上一界面 \n"); }system("cls");//printf("\n 您的选择是 9\n”); printf("\n\n\n\n"); printf("\t printf("\t\t\t printf("\t\t\t printf("\t\t\t printf("\t\t\t printf("\n"); //getchar();重庆文理学院 软件工程学院 信息工程专业欢迎查看作者信息\n\n"); \n\n"); \n\n");胡旭平、杨少波、孙昊制作\n\n");\n\n\n\n");职工信息加载成功!\n\n");。

职工信息管理系统C语言源代码

职工信息管理系统C语言源代码

#include <stdio.h>#include <windows.h>#include <string.h>#define N 100struct employee{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];}em[100]; /*定义一个结构体*/void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_xueli();void search_tel();void modify(); /*定义各函数*/void main(){menu();int n,flag;char a;do{ printf("请选择你需要操作的步骤(1--7):\n");scanf("%d",&n);if(n>=1 && n<=7){f lag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(n){case 1:printf(" ◆◆◆输入职工信息◆◆◆\n");printf("\n");input();break;case 2:printf(" ◆◆◆浏览职工信息◆◆◆\n");printf("\n");display();break;case 3:printf(" ◆◆◆按职工号查询职工信息◆◆◆\n");printf("\n");search();break;case 4:printf(" ◆◆◆删除职工信息◆◆◆\n");printf("\n");del();break;case 5:printf(" ◆◆◆添加职工信息◆◆◆\n");printf("\n");add();break;case 6:printf(" ◆◆◆修改职工信息◆◆◆\n");printf("\n");modify();break;case 7:exit(0);break;default :break;}getchar();printf("\n");printf("是否继续进行(y or n):\n");scanf("%c",&a);if(a=='y'){flag=1;system("cls"); /*清屏*/menu(); /*调用菜单函数*/printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d",&n);printf("\n");}elseexit(0);}}void menu() /*菜单函数*/{printf(" ************欢迎进入职工信息管理系统**********\n");printf(" 1.录入职工信息");printf(" 2.浏览职工信息\n");printf(" 3.查询职工信息");printf(" 4.删除职工信息\n");printf(" 5.添加职工信息");printf(" 6.修改职工信息\n");printf(" 7.退出\n");printf(" ********************谢谢使用******************\n"); printf("\n");printf("\n");}void input() /*录入函数*/{ int i,m;printf("请输入需要创建信息的职工人数(1--100):\n");scanf("%d",&m);for (i=0;i<m;i++){printf("请输入职工号:");scanf("%d",&em[i].num);printf("请输入姓名: ");scanf("%s",em[i].name);getchar();printf("请输入性别(f--女m--男): ");scanf("%c",&em[i].sex);printf("请输入年龄: ");scanf("%d",&em[i].age);printf("请输入学历: ");scanf("%s",em[i].xueli);printf("请输入工资: ");scanf("%d",&em[i].wage);printf("请输入住址: ");scanf("%s",em[i].addr);printf("请输入电话: ");scanf("%s",em[i].tel);printf("\n");}printf("\n创建完毕!\n");save(m);}void save(int m) /*保存文件函数*/{int i;FILE*fp;if ((fp=fopen("employee_list","wb"))==NULL){printf ("cannot open file\n");exit(0);}for (i=0;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() /*导入函数*/{FILE*fp;int i=0;if((fp=fopen("employee_list","rb"))==NULL){printf ("cannot open file\n");exit(0);}else{do{fread(&em[i],sizeof(struct employee),1,fp);i++;}while(feof(fp)==0);}fclose(fp);return(i-1);}void display() /*浏览函数*/{int i;int m=load();printf(" 职工号姓名性别年龄\n");for(i=0;i<m;i++) /*m为输入部分的职工人数*/printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age); printf("\n 学历工资住址电话\n");for(i=0;i<m;i++) /*m为输入部分的职工人数*/printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel); }void del() /*删除函数*/{int m=load();int i,j,n,t,flag;char name[20];printf("\n 原来的职工信息:\n");display();printf("\n");printf("请输入要删除的职工的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(em[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄\n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age);printf("\n 学历工资住址电话\n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);printf("\n确实要删除此人信息请按1,不删除请按0\n");scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++){strcpy(em[j].name,em[j+1].name);em[j].num=em[j+1].num;em[j].sex=em[j+1].sex;em[j].age=em[j+1].age;strcpy(em[j].xueli,em[j+1].xueli);em[j].wage=em[j+1].wage;strcpy(em[j].addr,em[j+1].addr);strcpy(em[j].tel,em[j+1].tel);}flag=0;}}}if(!flag)m=m-1;elseprintf("\n对不起,查无此人!\n");printf("\n 浏览删除后的所有职工信息:\n");save(m); /*调用保存函数*/display(); /*调用浏览函数*/printf("\n继续删除请按1,不再删除请按0\n");scanf("%d",&t);switch(t){case 1:del();break;case 0:break;default :break;}}void add()/*添加函数*/{FILE*fp;int n;int count=0;int i;int m=load();printf("\n 原来的职工信息:\n");display();printf("\n");fp=fopen("emploee_list","a");printf("请输入想增加的职工数:\n");scanf("%d",&n);for (i=m;i<(m+n);i++){printf("\n 请输入新增加职工的信息:\n");printf("请输入职工号: ");scanf("%d",&em[i].num);printf("\n");printf("请输入姓名: ");scanf("%s",em[i].name);getchar();printf("请输入性别(f--女m--男): ");scanf("%c",&em[i].sex);printf("请输入年龄: ");scanf("%d",&em[i].age);printf("请输入学历: ");scanf("%s",em[i].xueli);printf("请输入工资: ");scanf("%d",&em[i].wage);printf("请输入住址: ");scanf("%s",em[i].addr);printf("请输入电话: ");scanf("%s",em[i].tel);printf("\n");count=count+1;printf("已增加的人数:\n");printf("%d\n",count);}printf("\n添加完毕!\n");m=m+count;printf("\n浏览增加后的所有职工信息:\n"); printf("\n");save(m);display();fclose(fp);}void search()/*查询函数*/{int t,flag;do{ printf("\n按职工号查询请按1; 按学历查询请按2; 按电话号码查询请按3;进入主函数请按4\n");scanf("%d",&t);if(t>=1&&t<=4){flag=1;break;}else{flag=0;printf("您输入有误,请重新选择!");}}while(flag==0);while(flag==1){switch(t){ case 1:printf("按职工号查询\n");search_num();break;case 2:printf("按学历查询\n");search_xueli();break;case 3:printf("按电话号码查询\n");search_tel();break;case 4:main();break;default:break;}}}void search_num(){int num;int i,t;int m=load();printf("请输入要查找的职工号:\n");scanf("%d",&num);for(i=0;i<m;i++)if(num==em[i].num){ printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄\n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age);printf("\n 学历工资住址电话\n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){ case 1:search();break;case 2: break;default:break;}}void search_xueli(){ char xueli[30];int i,t;int m=load();printf("请输入要查找的学历:\n");scanf("%s",xueli);for(i=0;i<m;i++)if(strcmp(em[i].xueli,xueli)==0){printf ("\n已找到,其记录为:\n");printf(" 职工号姓名性别年龄\n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age);printf("\n 学历工资住址电话\n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel); }if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询学历请按2\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void search_tel(){ char tel[20];int i, t;printf("请输入要查找的电话号码:\n");scanf("%s",tel);for(i=0;i<m;i++)if(strcmp(tel,em[i].tel)==0){printf("\n已找到此人,其记录为:\n");printf(" 职工号姓名性别年龄\n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age);printf("\n 学历工资住址电话\n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);break;}if(i==m)printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询电话号码请按2\n");scanf("%d",&t);switch(t){case 1:search();break;case 2:break;default :break;}}void modify() /*修改函数*/{int num;char name[20];char sex;int age;char xueli[30];int wage;char addr[30];char tel[20];int b,c,i,n,t,flag;int m=load();printf("\n 原来的职工信息:\n");display();printf("\n");printf("请输入要修改的职工的姓名:\n");scanf("%s",name);for(flag=1,i=0;flag&&i<m;i++){if(strcmp(em[i].name,name)==0){printf("\n已找到此人,原始记录为:\n");printf(" 职工号姓名性别年龄\n");printf("\n %-8d%-6s%-6c%-6d\n",em[i].num,em[i].name,em[i].sex,em[i].age);printf("\n 学历工资住址电话\n");printf("\n %-6s%-6d%-6s%-6s\n",em[i].xueli,em[i].wage,em[i].addr,em[i].tel);printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号2.姓名3.性别4.年龄5.学历 6.工资7.住址8.电话\n");printf("请输入你想修改的那一项序号:\n");scanf("%d",&c);if(c>8||c<1)printf("\n选择错误,请重新选择!\n");}flag=0;}}if(flag==1)printf("\n对不起,查无此人!\n");do{switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/{case 1:printf("职工号改为: ");scanf("%d",&num);em[i-1].num=num;break;case 2:printf("姓名改为: ");scanf("%s",name);strcpy(em[i-1].name,name);break;case 3:printf("性别改为: ");getchar();scanf("%c",&sex);em[i-1].sex=sex;break;DP05b_205_215TC005 092-661解决方案case 4:printf("年龄改为: ");scanf("%d",&age);em[i-1].age=age;break;case 5:printf("学历改为: ");scanf("%s",xueli);strcpy(em[i-1].xueli,xueli);break;case 6:printf("工资改为: ");scanf("%d",wage);break;case 7:printf("住址改为: ");scanf("%s",addr);strcpy(em[i-1].addr,addr);break;case 8:printf("电话改为: ");scanf("%s",tel);strcpy(em[i-1].tel,tel);break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按1 ; 不,重新修改请按2: \n");scanf("%d",&b);}while(b==2);printf("\n浏览修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n继续修改请按1,不再修改请按0\n");scanf("%d",&t);switch(t){case 1:modify();break;case 0:break;default :break; }} 雨滴穿石,不是靠蛮力,而是靠持之以恒。

单链表程序设计c语言

单链表程序设计c语言

单链表程序设计c语言以下是使用C语言实现单链表的基本示例:```cinclude <>include <>// 定义链表节点结构体struct Node {int data;struct Node next;};// 创建新节点struct Node createNode(int data) {struct Node newNode = (struct Node)malloc(sizeof(struct Node)); newNode->data = data;newNode->next = NULL;return newNode;}// 插入新节点到链表末尾void insertNode(struct Node head, int data) { struct Node newNode = createNode(data); if (head == NULL) {head = newNode;return;}struct Node current = head;while (current->next != NULL) {current = current->next;}current->next = newNode;}// 打印链表void printList(struct Node head) {while (head != NULL) {printf("%d ", head->data);head = head->next;}printf("\n");}// 测试代码int main() {struct Node head = NULL; // 初始化链表为空 insertNode(&head, 1); // 插入节点1到链表末尾 insertNode(&head, 2); // 插入节点2到链表末尾 insertNode(&head, 3); // 插入节点3到链表末尾 printList(head); // 打印链表:1 2 3return 0;}```。

c语言单链表程序代码

c语言单链表程序代码

c语言单链表程序代码单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

单链表的优点在于插入和删除操作的效率高,但是访问任意节点的效率较低。

下面是一个简单的单链表程序代码:```c#include <stdio.h>#include <stdlib.h>struct Node {int data;struct Node* next;};void insert(struct Node** head, int data) {struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = data;newNode->next = *head;*head = newNode;}void printList(struct Node* head) {while (head != NULL) {printf("%d ", head->data);head = head->next;}printf("\n");}int main() {struct Node* head = NULL;insert(&head, 1);insert(&head, 2);insert(&head, 3);printList(head);return 0;}```这个程序定义了一个结构体`Node`,包含一个整型数据`data`和一个指向下一个节点的指针`next`。

`insert`函数用于在链表头部插入一个新节点,`printList`函数用于打印整个链表。

在`main`函数中,我们创建了一个空链表`head`,然后插入了三个节点,最后打印整个链表。

这个程序虽然简单,但是涉及到了单链表的基本操作。

C语言职工信息管理系统课程设计

C语言职工信息管理系统课程设计

湖北医药学院信息管理与信息系统专业《C程序设计》课程设计报告题目:职工信息管理系统班级:学号:姓名:成绩:前言在理论学习和基础实验的基础上,开发规模较大的程序,掌握应用计算机解决实际问题的基本方法,熟悉C程序开发的全过程。

本任务是根据给定的数据和程序,应用单向链表处理一个小班学生的信息。

通过整个程序开发的过程,提高综合应用C语言的能力、编程和调试能力,为学习软件专业课程创建较扎实的理论基础和实践基础。

一、系统功能和原始数据1、系统功能A.建立学生信息表,录入10名学生的信息,并将结果保存在文件student1.txt中B.显示所有学生信息C.给定某学生的学号,删除该学生的信息D.添加一名学生的信息,将其插入到相应位置,使整个学生信息表按学号有序E.给定某学生的学号,修改该学生的信息F.按姓名查询学生信息G.按入学成绩对学生的信息进行排序H.计算并显示学生入学平均成绩,显示入学成绩最高分和最低分的学生信息I.将最后的学生信息存入文件student2.txt中说明:1.学生信息数据项:学号、姓名、性别、年龄、院系、入学成绩2.录入学生信息时按学号由小到大的顺序录入3.系统功能使用结构数组和单向链表两种方法实现输出记录模块工资管理系统输入记录模块查询记录模块更新记录模块统计记录模块键盘出入文件读入按姓名查询显示所有信息删除记录修改记录排序模块插入记录统计员工数和工资输出到屏幕输出到文件工资管理系统功能模块图2.原始数据3.数据结构本程序定义了结构体emplyee,用于存放职工的基本信息和工资信息。

typedef struct employee /*标记为employee*/{char num[10];char name[15];char sex;charcharint gz;}ZGGZ其各字段的值的含义如下。

num[10]: 保存职工编号name [15]:保存职工姓名sex:保存职工性别:保存职工部门:保存职工职称gz :保存职工工资二、程序设计1、建立职工信息结构体(1)函数原型、功能和形参说明1)、printheader()函数原型:void printheader()printheader()函数用于在以表格形式显示记录时,打印输出表头信息。

C语言课程设计职工工资信息管理系统源代码

C语言课程设计职工工资信息管理系统源代码

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <conio.h>#define N 10000int choice;struct employee{int num;int position;char name[10000];char sex[2];int salary;int i,max,t;}em[N];struct empsalary{char name[10000];int salary;}emps[N];void manage();void query();void input();void display();void change();void del();void add();void paixu();int changeposition();int changesalary();void querysalary();void creat();void main(){do{printf("欢迎进入职工管理系统中文版\n"); printf("请你选择操作类型:\n");printf("1进入管理系统\n");printf("2进入查询系统\n");printf("0退出系统\n");scanf("%d",&choice);switch(choice){case 1:manage();break;case 2:query();break;case 0:{printf("谢谢使用,再见\n");exit(0);}default:{printf("输入有错误请重新输入:\n");return;}}}while(1);}void manage(){int choicemanage;char choice='y';while(choice=='y'||choice=='Y'){printf("欢迎进入管理系统\n");printf("请你选择操作类型:\n");printf("1输入职工信息\n");printf("2显示职工信息\n");printf("3修改职工信息\n");printf("4追加一个职工信息\n");printf("5删除一个职工信息\n");printf("6排序\n");printf("0返回\n");scanf("%d",&choicemanage);switch(choicemanage){case 1:input();break;case 2:display();break;case 3:change();break;case 4:add();break;case 5:del();case 6:paixu();break;case 0:printf("谢谢你的使用再见\n");return;default:printf("你的输入有错请重新输入\n"); }printf("是否继续管理?(y/n)");scanf("%s",&choice);}if(toupper(choice)=='N'||(choice)=='n'){printf("输入完毕,任意键返回\n");getch();return;}}void input(){FILE *fp;int i=0;char choiceinput='y';if((fp=fopen("employee.txt","w"))==NULL) return;while(choiceinput=='y'||choiceinput=='Y'){i++;printf("第%d个职工\n",i);printf("\n");printf("请你输入工号:\n");scanf("%d",&em[i].num);printf("\n");printf("请你输入职位:\n");printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");scanf("%d",&em[i].position);printf("\n");printf("请你输入姓名:\n");scanf("%s",em[i].name);printf("\n");printf("请你输入性别以m为男f为女:\n");scanf("%s",em[i].sex);printf("\n");printf("请你输入工资:\n");scanf("%d",&em[i].salary);printf("\n");printf("是否继续输入?(y/n)\n");scanf("%s",&choiceinput);fwrite(&em[i],sizeof(struct employee),1,fp);}if(toupper(choiceinput)=='N'){fclose(fp);printf("输入完毕,任意键返回\n");getch();return;}}void display(){FILE *fp;int i;if((fp=fopen("employee.txt","r"))==NULL)return;printf("输出结果:\n");for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {printf("工号%d\n",em[i].num);printf("职位为%d\n",em[i].position);printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name);printf("性别为%s\n",em[i].sex);printf("其中m为男f为女\n");printf("工资为%d\n",em[i].salary);}printf("完毕按任意键返回\n");getch();fclose(fp);return;}void change(){FILE *fp;int i;char chname[8];int choicechange;printf("请你输入要修改的人的姓名:\n");scanf("%s",&chname);if((fp=fopen("employee.txt","w+"))==NULL){printf("不能够打开这个文件\n");return;}for(i=0;i<N;i++){if(strcmp(chname,em[i].name)==0){printf("这是你要修改的人的信息\n");printf("工号为%d\n 职位为%d\n 姓名为%s\n 性别为%s\n 工资为%d\n",em[i].num,em[i].position,em[i].name,em[i].sex,em[i].salary);printf("请你输入要修改的部分:\n");printf("1修改职位\n");printf("2修改工资\n");printf("0退出系统\n");printf("请选择\n");scanf("%d",&choicechange);switch(choicechange){case 1:em[i].position=changeposition();break;case 2:em[i].salary=changesalary();break;case 0:return;default :printf("输入有错误");}fwrite(&em[i],sizeof(struct employee),1,fp); }}fclose(fp);printf("操作完成按任意键返回\n");getch();return;}int changeposition(){int newposition;printf("请你输入新职位:\n");printf("1董事长2总经理3副总经理\n"); printf("4经理5副经理6秘书\n"); printf("7技术员8领班9员工\n"); scanf("%d",&newposition);return(newposition);}int changesalary(){int newsalary;printf("请你输入新的工资:\n");scanf("%d",&newsalary);return(newsalary);}void add(){struct employee emp;FILE *fp;int i=0;if((fp=fopen("employee.txt","ab+"))==NULL){printf("不能够打开这个文件\n");getch();return;}printf("请你输入新人的内容:\n");printf("请你输入工号:\n");scanf("%d",&em[i].num);printf("请你输入职位:\n");printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");scanf("%d",&emp.position);printf("请你输入姓名:\n");scanf("%s",);printf("请你输入性别以m为男f为女:\n");scanf("%s",emp.sex);printf("请你输入工资:\n");scanf("%d",&emp.salary);fwrite(&emp,sizeof(struct employee),1,fp);rewind(fp);printf("插入完毕,按任意键返回\n");getch();fclose(fp);return;}void del(){int i=0;char delname[8];FILE *fp;if((fp=fopen("employee.txt","w"))==NULL){printf("文件为空,不能够打开\n");printf("按任意键返回\n");getch();return;}printf("请你输入要删除的人的姓名:\n");scanf("%s",delname);for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {if(strcmp(em[i].name,delname)!=0)fwrite(&em[i],sizeof(struct employee),1,fp);}fclose(fp);if((fp=fopen("employee.txt","r"))==NULL)return;printf("新的职工的信息为:\n");for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {printf("工号%d",em[i].num);printf("职位为%d",em[i].position);printf("1董事长2总经理3副总经理\n");printf("4经理5副经理6秘书\n");printf("7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name[8]);printf("性别为%s\n",em[i].sex[2]);printf("其中m为男f为女\n");printf("工资为%d\n",em[i].salary);fclose(fp);}}void query(){FILE *fp;int i=0;char quename[8];if((fp=fopen("employee.txt","r"))==NULL){printf("不能够打开文件,按任意键返回\n");getch();return;}printf("请你输入要查询的人的姓名\n");scanf("%s",quename);for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++) {if(strcmp(em[i].name,quename)==0){printf("\t\t\n查询到的职工号或姓名为的信息如下:\n");printf("以下是你要查询的人的信息\n");printf("工号%d",em[i].num);printf("职位为%d",em[i].position);printf("\t 1董事长2总经理3副总经理\n");printf("\t 4经理5副经理6秘书\n");printf("\t 7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name);printf("性别为%s\n",em[i].sex);printf("\t其中m为男f为女\n");printf("工资为%d\n",em[i].salary);printf("\n");printf("查询完毕,按任意键返回\n");getch();fclose(fp);return;}}printf("没有这样的人,按任意键返回\n");getch();fclose(fp);return;}void querysalary(){int i;FILE *fp1,*fp2;creat();if((fp1=fopen("employee.txt","w+"))==NULL)return;for(i=0;fread(&em[i],sizeof(struct employee),1,fp1)!=0;i++) {printf("输出结果为:\n");printf("工号%d",em[i].num);printf("职位为%d",em[i].position);printf(" 1董事长2总经理3副总经理\n");printf(" 4经理5副经理6秘书\n");printf(" 7技术员8领班9员工\n");printf("姓名为%s\n",em[i].name[8]);printf("性别为%s\n",em[i].sex[2]);printf("其中m为男f为女\n");printf("工资为%d\n",em[i].salary);strcpy(emps[i].name,em[i].name);emps[i].salary=em[i].salary;}if((fp2=fopen("empsalary.txt","w"))==NULL)return;for(i=0;i<N;i++)fwrite(&emps[i],sizeof(struct empsalary),1,fp2);fclose(fp1);fclose(fp2);}void creat(){FILE *fp;if((fp=fopen("D:\\employee.txt","w+"))==NULL)return;input();fclose(fp);}void paixu(){int max,i,t,j;for(i=1;i<10;i++){max=em[i].salary;for(j=i;j<10;j++){if(em[j].salary>max){max=em[j].salary;t=em[j].salary;em[j].salary=t;}}}printf("姓名工资工号性别职位\n");for(i=1;i<10;i++)printf(" %s %d %d %s %d\n ",em[i].name,em[i].salary,em[i].num,em[i].sex,em[i].position);}。

C语言课程设计报告 职工信息管理系统

C语言课程设计报告 职工信息管理系统

case 0: exit(); } printf("\n\n 操作完毕,请再次选择!"); } else printf("\n\n 选择错误,请再次选择!"); } } 2 数据添加 【程序】
void append() { if((fp=fopen("worker.xls","a"))==NULL) { printf("\n 不能打开该文件!"); exit(); } printf("\n 请输入添加职工信息(姓名、职工号、性别、年龄、学历、职位、 工资、电话、地址)\n"); scanf("%s%s%s%s%s%s%s%s%s",,one.num,one.sex,one.age,one.recor d,one.position,one.wanges,one.tel,one.addr); fprintf(fp,"%-10s%-8s%-5s%-5s%-10s%-8s%-8s%-10s%-15s\n",,one.n um,one.sex,one.age,one.record,one.position,one.wanges,one.tel,one.addr); fclose(fp); }
5 数据删除 【程序】
void delete() { int m,k=0; long a,b; char namekey[8], valid[4]; printf("\n 请输入您要删除的职工姓名:"); scanf("%s",namekey); if((fp=fopen("worker.xls","r+"))==NULL) { printf("\n 不能打开该文件!"); exit(); } while(!feof(fp)) { a=ftell(fp); fscanf(fp,"%s%s%s%s%s%s%s%s%s\n",,one.num,one.sex,one.age,one. record,one.position,one.wanges,one.tel,one.addr); if(strcmp(namekey,)==0) { k=1; break; } } if(k==1) {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("\t* 职工信息管理系统_结构体数组实现 *\n");
printf("\t* *\n");
printf("\t* [1] 增加职工信息 [2] 删除职工信息 *\n");
printf("\t* [3] 查询职工信息 [4] 修改职工信息 *\n");
printf("\t* [5] 插入职工记录 [6] 统计职工记录 *\n");
if(!p) /*p==NULL,NUll在stdlib中定义为0*/
{
printf("\n=====>提示:没有职工记录可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart(); //打印横线
printc(); //r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的工号*/
return r;
r=r->next;
}
}
else if(strcmp(zcornum,"zc")==0) /* 按职称查询 */
{
r=l->next;
char sex[4];
char bm[15];
char zc[20];
int gz;
};
typedef struct node
{
struct employee data;
struct node *next;
}Node,*Link;
//Link l (注意是:字母l不是数字1)
void add(Link l);
void Sort(Link l); //排序
void Modify(Link l); //修改功能
void save(Link l); //将单链表l中的数据写入文件
void printe(Node *p); //本函数用于打印链表中某个节点的数据内容 */
//以下4个函数用于输出中文标题
void printstart();
printf("\t* [7] 排序 [8] 保存职工信息 *\n");
printf("\t* [9] 显示数据 [0] 退出系统 *\n");
printf("\t* *\n");
printf("\t*****************************************************************\n");
} //void menu菜单结束
void Disp(Link l) //显示单链表l中存储的职工记录,内容为employee结构中定义的内容
{
int count=0;
Node *p;
p=l->next; // l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息
while(p) //逐条输出链表中存储的职工信息
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
} //void Disp结束
void printstart()
{
printf("-----------------------------------------------------------------------\n");
void Add(Link l) /* 增加职工 */
{
Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/
char num[10];
while(r!=NULL)
{
if(strcmp(r->data.zc,findmess)==0) /*若找到findmess值的职工职称*/
return r;
r=r->next;
}
}
return 0; /*若未找到,返回一个空指针*/
}
//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}
void Nofind()
{
printf("\n=====>提示:没有找到该职工!\n");
}
void printc() /* 本函数用于输出中文 */
{
printf(" 工号\t 姓名 性别 部门 职称 工资 总工资 平均工资\n");
void disp(Link l); //查看职工所有信息
void del(Link l); //删除功能
Node* Locate(Link l,char findmess[],char nameornum[]);
void Qur(Link l); //查询功能
void Tongji(Link l); //统计
void Wrong();
void Nofind();
void printc();
void menu()
{
printf("\t*****************************************************************\n");
printf("\t* *\n");
}
void printe(Node *p)/* 本函数用于打印链表中某个节点的数据内容 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",
p->data.num,p->,p->data.sex,p->data.bm,p->data.zc,p->data.gz);
//C语言课程设计 职工信息管理系统—单链表实现
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int saveflag=0; /*是否需要存盘的标志变量*/
struct employee
{
char name[15];
char num[10];/* 工号 */
}
//Locate(l,findmess,"num");
/* 该函数用于定位连表中符合要求的结点,并返回该指针 */
Node* Locate(Link l,char findmess[],char zcornum[])
{
Node *r;
if(strcmp(zcornum,"num")==0) /* 按工号查询 */
相关文档
最新文档