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语言单链表实现职工工资管理
/****************************************************************************** *职工工资管理小软件******************************************************************************* /#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>/******************************************************************************职工变量定义******************************************************************************/ typedef struct employee{/*数据域*/char sex[10]; //性别char age[10]; //年龄char post[10]; //岗位char EmployeeID[15]; //工号char name[10]; //姓名int basesalary; //基本工资int postwage; //岗位工资float totalwage; //总工资/*指针域*/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); //输出一个节点的数据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(); //职工信息更新函数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);while(iChoice<0||iChoice>2){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(" 您的输入有误!\n");printf(" 请重新输入您的选择(0-2):\n");scanf("%d",&iChoice);}switch(iChoice){case 1:MainMenu();break;case 2:author();back();break;case 0:system("cls");printf(" \n\n\n\n\n\n");printf(" 谢谢使用! \n\n");printf(" \t再见!\n\n\n\n");exit(0);}fflush(stdin);getchar();system("cls");}}/***************************************************************************** 功能:登陆函数,进行密码验证*****************************************************************************/ void MainMenu(){char key[10],password[10]="123";int iNum=1;LinkList pHead; //定义单链表结点指针printf(" 请输入密码: \t");scanf("%s",key);while(iNum<=3){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(" |*****************欢迎进入职工工资管理系统************************|\n");printf(" | |\n");printf(" | |\n");printf(" | 1 职工信息创建|\n");printf(" | |\n");printf(" | 2 职工信息浏览|\n");printf(" | |\n");printf(" | 3 职工信息查询|\n");printf(" | |\n");printf(" | 4 职工信息添加|\n");printf(" | |\n");printf(" | 5 职工信息修改|\n");printf(" | |\n");printf(" | 6 职工信息保存|\n");printf(" | |\n");printf(" | 7 职工信息删除|\n");printf(" | |\n");printf(" | 8 职工信息读取|\n");printf(" | |\n");printf(" | 9 职工工资排序|\n");printf(" | |\n");printf(" | 10 职工工资统计|\n");printf(" | |\n");printf(" | 0 退出系统|\n");printf(" | |\n");printf(" | |\n");printf("|*****************************************************************|\n");printf("\n\n");printf(" 请输入你所选择的选项(0-9):");scanf("%d",&iChoice);while(iChoice>12||iChoice<0){printf(" 您的输入有误!\n");printf(" 请重新输入你所选择的选项(0-9):");scanf("%d",&iChoice);}return iChoice;}/*****************************************************************************功能:输入字符长度判断函数,判断输入字符长度是否超过原定长度*****************************************************************************/void stringinput(char *t,int lens,char *notice){char n[50];do{printf(notice); //显示提示信息scanf("%s",n); //输出字符串if(strlen(n) >(size_t)lens)printf("\n 输入字符过长!"); //超过lens只重新输入}while(strlen(n)>(size_t)lens);strcpy(t,n); //将输入的字符串拷贝到字符串t中}/***************************************************************************** 功能:职工信息创建*****************************************************************************/ LinkList CreatLinkList() //创建一个链表,包含n个节点{LinkList pHead;LinkList pNew,pTail;int i,iNum=0;pHead=(LinkList)malloc(sizeof(LNode)); //为头节点分配内存空间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; //将pNew链到链表中pTail=pNew;iCount++;}}}pTail->next=NULL; //将链表的最后一个节点的指针域置空printf(" \n\n");printf(" 当前共输入%d个职工信息\n\n",iCount);}printf(" \n\n");printf(" 职工信息创建完成! \n\n");return pHead;}/****************************************************************************** *功能:输出一个节点的数据******************************************************************************* */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");}/*******************************************************************************功能:职工信息输出********************************************************************************/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 职工信息输出完成! \n");printf("\n 当前共有%d个职工! \n\n\n",iNum);}/****************************************************************************** *功能:查找职工信息******************************************************************************* */LinkList FindWorker(LinkList pHead){LinkList perNode;char WorkNumber[15];if(pHead->next == NULL){printf("当前没有职工信息...");return NULL;}printf(" 请输入工作者的工号或姓名:\n ");scanf("%s",WorkNumber);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(" 4:年龄\n");printf(" 5:任职岗位\n");printf(" 6:基本工资\n");printf(" 7:岗位工资\n\n");do{printf("\t请选择:\n");scanf("%d",&type);} while (type > 7 || type < 0);switch (type){case 1:stringinput(ptrWork->name,10,"\n\t请输入职工姓名:\t\t");break;case 2:stringinput(ptrWork->EmployeeID,15,"\n\t请输入职工工号:\t\t");break;case 3:stringinput(ptrWork->sex,10,"\n\t请输入职工性别:\t\t");break;case 4:stringinput(ptrWork->age,10,"\n\t请输入职工年龄:\t\t");break;case 5:stringinput(ptrWork->post,10,"\n\t请输入职工岗位:\t\t");break;case 6:printf("\n\t请输入职工基本工资:\t");scanf("%d",&ptrWork->basesalary);break;case 7:printf("\n\t请输入职工岗位工资:\t");scanf("%d",&ptrWork->postwage);break;}}}/************************************************************************//* 对链表进行排序 *//************************************************************************/void sortList(LinkList pHead){LinkList seconde = pHead->next; //指向第一个结点//*pHead->next = NULL;LNode *perNode = pHead; //指向前面一个结点LNode *node = perNode->next; //指向正在比较的这个节点LNode * curNode; //是带插入的结点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;}}}}/****************************************************************************** *功能:把职工信息保存到文件******************************************************************************* */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->EmployeeID,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 职工信息加载成功!\n\n");return pHead;}*//***************************************************************************** 功能:查询作者信息*****************************************************************************/ void author(){system("cls");//printf("\n您的选择是9\n");printf("\n\n\n\n");printf("\t 欢迎查看作者信息 \n\n\n\n");printf("\t\t\t重庆文理学院\n\n");printf("\t\t\t软件工程学院\n\n");printf("\t\t\t信息工程专业\n\n");printf("\t\t\t胡旭平、杨少波、孙昊制作\n\n");printf("\n");//getchar();}/***************************************************************************** 功能:返回上一界面函数*****************************************************************************/ void back(){printf("\n\t\t\t ===>按Enter键返上一界面\n");}。
C语言课程设计单项链表实现工资管理系统
高级语言(C语言)课程设计说明书起止日期:2012年07月2日至2012年07月14日题目工资管理系统学生姓名班级学号成绩通信与信息工程学院一.课程设计要求课程设计系统组成及模块功能:工资管理程序主要完成对职工的工资信息录入,然后进行排序,统计,查询,计算税金等功能操作。
具体要求如下:1.职工录入工资信息包括:编号,姓名,基本工资,扣款,应发工资,税金,实发工资2.程序主菜单如下:"**************MENU*************",/*菜单的标题行*/0.initlist/*初始化单链表*/1.Enterlist/*输入数据,创建单链表*/2.Listall/*显示所有记录*/3.Calcthesalary/*计算实发工资*/4.Searchrecordonname/*查找职工信息数据*/5.Deletearecord/*删除记录*/6.Sortonsfgz/*按实发工资升序排序*/puterticketnumber/*计算所需票面数*/8.Totalonnumber/*分类合计*/9.Quit/*退出*/3.要求定义如下函数,对应菜单功能/******函数原型*********/voidinit();/*单链表初始化*/voidcreate();/*创建单链表,输入数据*/voidcalc();/*计算实发工资*/voiddelete();/*删除*/voidsearch();/*查找*/voidcomputer();/*计算所需各种票面张数*/voidsort();/*排序*/voidlist();/*显示所有数据*/voidprint(SALARY*p);/*输出单条记录*/ floatfax(floatx);/*计算税金*/voidtotal();/*分类合计*/intmenu_select();/*主菜单*/二.程序的功能设计此工资管理系统主要利用链表实现,由如下八个功能模块实现1、输入模块。
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 "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语言课程设计报告:职工信息管理系统程序设计
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语言课程设计——职工管理程序(链表实现)
/********************************头文件调用*********************************************/#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语⾔之单向链表详解及实例代码1,单向链简洁。
单向链表(单链表)是链表的⼀种,其特点是链表的链接⽅向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使⽤指针进⾏构造的列表;⼜称为结点列表,因为链表是由⼀个个结点组装起来的;其中每个结点都有指针成员变量指列表中的下⼀个结点;列表是由结点构成,由head指针指向第⼀个成为表头的结点⽽终⽌于最后⼀个指向nuLL的指针;2,例⼦要求:根据⽰例代码中的例⼦,完成单向链表(single linked list)中的以字符串为数据的链表的插⼊、删除以及查找,并⽀持单向链表的反转;3,代码实现。
#include <stdio.h>#include <math.h>#include <cstring>#include <memory.h>#include <malloc.h>//节点的定义typedef struct Node {void *data; //数据域 //链域struct Node *next;} NodeStruct, *pNode;pNode head = NULL;typedef char (*pCompareFunc)(void *a, void *b);typedef void* (*pChar)(void *p);// 字符串判断int str_compare(void *a, void *b) {char *pa = (char*)a;char *pb = (char*)b;return strcmp(pa , pb);}// 分配⼀个节点pNode allocate_node(void *data, pChar char_func) {pNode node = allocate();node->data = char_func(data);return node;}// 创建节点pNode allocate() {void *p = malloc(sizeof(NodeStruct));pNode node = (pNode)p;node->next = NULL;node->data = NULL;return node;}// 添加⼀个节点void insertNode(pNode node){if (head == null){head=node;}else {node->next = head;head = node;}}void* char_char(void *p) {char* pa = (char*)malloc(sizeof(char));memcpy(pa, p, sizeof(char));return pa;}// 初始化节点pNode allocate_node(void *data, pChar char_func) { pNode node = allocate();node->data = char_func(data);return node;}// 释放资源void free_list(pNode node) {pNode next = node;while (next != NULL) {if (next->data != NULL)free(next->data);pNode temp = next;next = next->next;free(temp);}}// 1.1 添加⼀个节点void insert(pNode node) {if (head == NULL)head = node;else {node->next = head;head = node;}}//1.2查找int str_search(void* data,pCompareFunc compare){ pNode next = head;pNode prev = NULL;while (next != NULL ) {if (compare(data, next->data) == 0) {// 如果查找到了,就退出返回1return 1;break;}prev = next;next = next->next;}// 如果⼀直查找不到,就返回0return 0;}// 1.3删除节点void remove(void* data,pCompareFunc compare) { pNode next = head;pNode prev = NULL;while (next != NULL) {if (compare(data, next->data) == 0) {if (prev == NULL) {head = next->next;next->next = NULL;free_list(next);} else {prev->next = next->next;next->next = NULL;free_list(next);}break;}prev = next;next = next->next;}}//1.4反转void invert_order(){node *This,*prev;p=head.next;This=NULL;while(p) {prev=This;This=p;p=p->next;This->next=prev;}head.next=This;}void main(){// 1单向链表char a1[] = 'aaa1';char a2[] = 'aaa2';char a3[] = 'aaa3';// 1.1添加insertNode(allocate_node(a1, init_char));insertNode(allocate_node(a2, init_char));insertNode(allocate_node(a3, init_char));// 1.2查找int flag = 0;flag = str_search(&a2,str_compare);// 1.3删除remove(&a2,str_compare);// 1.4反转invert_order();}以上就是对 C语⾔单向联表的资料整理,后续继续补充相关资料,谢谢⼤家对本站的⽀持!。
数据结构C语言版 单链表源代码
/*单链表的各种操作*/#include <stdio.h>#include <malloc.h>#define null 0typedef int ElemType; /* 字符型数据*/struct LNode{ElemType data;struct LNode*next;};ﻩvoidsetnull(struct LNode **p);int length (struct LNode **p);ElemType get(struct LNode **p,int i);voidinsert(struct LNode **p,ElemType x,int i);void dele(struct LNode **p,int i);void display(structLNode **p);int locate(struct LNode **p,ElemTypex);void main(){ﻩstruct LNode *head,*q; /*定义静态变量*/ int select,x1,x2,x3,x4;ﻩint i,n;int m,g;char e,y;setnull(&head);/*建设链表并设置为空表*/printf("请输入数据长度:");scanf("%d",&n);ﻩfor(i=1;i<=n;i++){printf("将数据插入到单链表中:");ﻩﻩscanf("%d",&y);insert(&head,y,i);}/*插入数据到链表*/ﻩdisplay(&head); /*显示链表所有数据*/ﻩprintf("select 1 求长度length()\n");ﻩﻩprintf("select 2取结点get()\n");ﻩﻩprintf("select 3 求值查找locate()\n");ﻩprintf("select 4 删除结点delete()\n");ﻩﻩprintf("select 0 退出\n");ﻩﻩprintf("input your select: ");scanf("%d",&select);while(select!=0){switch(select)ﻩ{ﻩﻩcase 1:ﻩ{ﻩﻩﻩx1=length(&head);ﻩﻩprintf("输出单链表的长度%d",x1);ﻩﻩdisplay(&head);ﻩ}break;case 2:ﻩﻩ{ﻩprintf("请输入要取得结点: ");ﻩﻩscanf("%d",&m);ﻩx2=get(&head,m);printf("%d",x2);ﻩﻩdisplay(&head);}break;ﻩﻩcase3:ﻩﻩﻩ{ﻩprintf("请输入要查找的数据: ");ﻩscanf("%d",&e);ﻩx3=locate(&head,e);ﻩﻩprintf("%d",x3);ﻩdisplay(&head);ﻩ}break;ﻩﻩﻩcase 4:ﻩﻩ{ﻩﻩprintf("请输入要删除的结点:");ﻩscanf("%d",&g);dele(&head,g);ﻩﻩﻩdisplay(&head);ﻩ}break;ﻩ}printf("select 1求长度length()\n");printf("select2取结点get()\n"); ﻩﻩprintf("select 3求值查找locate()\n");printf("select 4删除结点delete()\n");printf("select 0退出\n");printf("input yourselect: ");ﻩscanf("%d",&select);ﻩ}ﻩ}void setnull(struct LNode **p){ﻩ*p=null;}intlength(struct LNode **p){ﻩint n=0;ﻩstruct LNode*q=*p;ﻩwhile (q!=null){ﻩn++;q=q->next;ﻩ}return(n);}ElemTypeget(struct LNode **p,int i) {intj=1;ﻩstruct LNode *q=*p;while (j<i&&q!=null)ﻩ{ﻩq=q->next;j++;ﻩ}ﻩif(q!=null)ﻩﻩreturn(q->data);elseﻩ{printf("位置参数不正确!\n");ﻩreturn0;}ﻩ}int locate(structLNode **p,ElemType x) {ﻩint n=0;ﻩstruct LNode*q=*p;ﻩwhile (q!=null&&q->data!=x){q=q->next;ﻩﻩn++;ﻩ}if(q==null)ﻩreturn(-1);ﻩelsereturn(n+1);}voidinsert(structLNode**p,ElemType x,int i){intj=1;ﻩstruct LNode *s,*q;s=(structLNode*)malloc(sizeof(structLN ode));ﻩs->data=x;q=*p;ﻩif(i==1)ﻩ{s->next=q;ﻩ*p=s;ﻩ}ﻩelse{ﻩwhile(j<i-1&&q->next!=null){ﻩﻩq=q->next;ﻩﻩj++;ﻩﻩ}ﻩﻩif(j==i-1)ﻩ{ﻩs->next=q->next;ﻩq->next=s;}ﻩelseprintf("位置参数不正确!\n");ﻩ}ﻩ}voiddele(struct LNode **p,int i) {ﻩint j=1;ﻩstruct LNode*q=*p,*t;ﻩif(i==1){ﻩﻩt=q;ﻩﻩ*p=q->next;ﻩ}ﻩelseﻩ{ﻩﻩwhile(j<i-1&&q->next!=null)ﻩﻩ{ﻩﻩﻩq=q->next;ﻩj++;ﻩﻩ}ﻩif(q->next!=null&&j==i-1)ﻩ{ﻩﻩﻩt=q->next;ﻩﻩq->next=t->next;}elseﻩﻩprintf("位置参数不正确!\n");}if(t!=null)ﻩfree(t);}void display(struct LNode **p){structLNode*q;ﻩq=*p;printf("单链表显示: ");ﻩif(q==null)printf("链表为空!");else if(q->next==null)ﻩprintf("%d\n",q->data);else{ﻩwhile(q->next!=null)ﻩ{ﻩﻩﻩprintf("%d->",q->data); ﻩﻩﻩq=q->next;ﻩﻩ}ﻩprintf("%d",q->data);}ﻩprintf("\n");}。
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 <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语言单链表课程设计一、课程目标知识目标:1. 学生能够理解单链表的基本概念,掌握单链表的存储结构和表示方法。
2. 学生能够掌握单链表的创建、插入、删除和遍历等基本操作。
3. 学生能够理解并掌握单链表在实际编程中的应用场景和优势。
技能目标:1. 学生能够运用C语言编写单链表的基本操作函数,如创建链表、插入节点、删除节点等。
2. 学生能够运用单链表解决实际问题,如数据排序、查找等。
3. 学生能够通过调试和修改代码,提高程序的正确性和优化程序性能。
情感态度价值观目标:1. 培养学生对数据结构和算法的兴趣,激发学生主动探究问题的热情。
2. 培养学生的团队合作精神,使学生学会与他人合作解决问题,共同进步。
3. 培养学生的逻辑思维能力,提高学生分析问题和解决问题的能力。
课程性质:本课程为C语言编程实践课程,旨在帮助学生掌握单链表这一基本数据结构,提高编程能力和解决实际问题的能力。
学生特点:学生已具备C语言基础知识和基本编程能力,具有一定的逻辑思维能力和问题解决能力。
教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重实践操作,鼓励学生动手编程,培养实际编程能力。
在教学过程中,关注学生个体差异,提供适当指导,确保每个学生都能达到课程目标。
二、教学内容1. 单链表基本概念:介绍单链表的定义、特点及其在数据结构中的地位。
- 理解单链表的存储结构- 掌握单链表的节点表示方法2. 单链表基本操作:- 创建单链表:学习如何初始化单链表,掌握动态内存分配。
- 插入节点:学习如何在单链表中插入新节点,掌握前插和后插操作。
- 删除节点:学习如何从单链表中删除指定节点,掌握删除操作的基本步骤。
- 遍历单链表:学习如何遍历单链表,实现数据输出。
3. 单链表应用场景:- 数据排序:学习使用单链表实现数据的排序算法,如冒泡排序、选择排序等。
- 查找元素:学习在单链表中查找指定元素,实现查找算法。
4. 单链表编程实践:- 编写单链表的基本操作函数。
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语言课程设计报告 职工工资管理系统
一.设计需求说明一、职工工资管理系统功能设计要求1. 输入记录:将每一个职工的姓名、ID 号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。
•该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。
3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
4.查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。
5. 删除记录:可删除数据文件中的任一记录。
6.恢复记录:能恢复被删除的任一记录。
7. 统计: (A) 计算各项工资平均工资及总工资, (B)•统计符合指定条件(如职工工资前三项之和在2000 元以上、2000~1500 元、1500~1000 元) 以内的工资职工人数及占总职工人数的百分比。
(C)按字符表格形式打印全部职工工资信息表及平均工资(•包括各项总的平均工资)。
8.保存数据文件功能。
9.打开数据文件功能。
经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试。
程序运行结果如下表所示(记录个数至少8 个)。
二.模块设计分析系统功能模块图:工作程序分析①输入:输入职工工资资料通过结构体的数组来进行操作,先头定义数组em[],先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部员工的资料输入,退出循环。
同时将数据储存在ckerk_list文件中并自动保存至磁盘。
注:如首次使用,尚未输入数据,请先输入数据。
输入的数据将自动保存。
再次选择输入功能时原数据将被覆盖。
②保存:将输入的资料存入磁盘读取文件clerk_list,若文件不存在,打印“打开失败并退出。
若存在,则通过循环语句将输入到结构体数组的数据逐个输入磁盘。
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语言版 单链表源代码
/*单链表的各种操作*/#include <>#include <>#define null 0typedef int ElemType; /* 字符型数据*/struct LNode{ElemType data;struct LNode *next;};void setnull(struct LNode **p);int length (struct LNode **p);ElemType get(struct LNode **p,int i);void insert(struct LNode **p,ElemType x,int i); void dele(struct LNode **p,int i);void display(struct LNode **p);int locate(struct LNode **p,ElemType x);void main(){struct LNode *head,*q; /*定义静态变量*/ int select,x1,x2,x3,x4;int i,n;int m,g;char e,y;setnull(&head); /*建设链表并设置为空表*/ printf("请输入数据长度: ");scanf("%d",&n);for(i=1;i<=n;i++){printf("将数据插入到单链表中: ");scanf("%d",&y);insert(&head,y,i);} /*插入数据到链表*/display(&head); /*显示链表所有数据*/ printf("select 1 求长度 length()\n");printf("select 2 取结点 get()\n");printf("select 3 求值查找 locate()\n");printf("select 4 删除结点 delete()\n");printf("select 0 退出\n");printf("input your select: ");scanf("%d",&select);while(select!=0){switch(select){case 1:{x1=length(&head);printf("输出单链表的长度%d ",x1);display(&head);}break;case 2:{printf("请输入要取得结点: ");scanf("%d",&m);x2=get(&head,m);printf("%d",x2);display(&head);}break;case 3:{printf("请输入要查找的数据: ");scanf("%d",&e);x3=locate(&head,e);printf("%d",x3);display(&head);}break;case 4:{printf("请输入要删除的结点: ");scanf("%d",&g);dele(&head,g);display(&head);}break;}printf("select 1 求长度 length()\n");printf("select 2 取结点 get()\n");printf("select 3 求值查找 locate()\n");printf("select 4 删除结点 delete()\n");printf("select 0 退出\n");printf("input your select: ");scanf("%d",&select);}}void setnull(struct LNode **p){*p=null;}int length (struct LNode **p){int n=0;struct LNode *q=*p;while (q!=null){n++;q=q->next;}return(n);}ElemType get(struct LNode **p,int i) {int j=1;struct LNode *q=*p;while (j<i&&q!=null){q=q->next;j++;}if(q!=null)return(q->data);else{printf("位置参数不正确!\n");return 0;}}int locate(struct LNode **p,ElemType x) {int n=0;struct LNode *q=*p;while (q!=null&&q->data!=x){q=q->next;n++;}if(q==null)return(-1);elsereturn(n+1);}void insert(struct LNode **p,ElemType x,int i){int j=1;struct LNode *s,*q;s=(struct LNode *)malloc(sizeof(struct LNode)); s->data=x;q=*p;if(i==1){s->next=q;*p=s;}else{while(j<i-1&&q->next!=null){q=q->next;j++;}if(j==i-1){s->next=q->next;q->next=s;}elseprintf("位置参数不正确!\n"); }}void dele(struct LNode **p,int i){int j=1;struct LNode *q=*p,*t;if(i==1){t=q;*p=q->next;}{while(j<i-1&&q->next!=null){q=q->next;j++;}if(q->next!=null&&j==i-1){t=q->next;q->next=t->next;}elseprintf("位置参数不正确!\n"); }if(t!=null)free(t);}void display(struct LNode **p){struct LNode *q;printf("单链表显示: ");if(q==null)printf("链表为空!");else if (q->next==null)printf("%d\n",q->data);else{while(q->next!=null){printf("%d->",q->data);q=q->next;}printf("%d",q->data);}printf("\n");}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有%d条记录已经保存.)\n",count);
saveflag=0;
}
else
{
system("cls");
printf("保存文件失败,'0'条记录被保存!\n");
}
fclose(fp);
} xt","ab+");
else
exit(0);
} ....\n");
while(!feof(fp)) n",count);
while(1)
{
menu();
printf("\t\t====>请选择:");
scanf("%d",&choose);
if(choose==0)
{
if(saveflag==1)
{
getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(list);
} //if
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}//if
switch(choose)
{
case 1:Add(list);
break; /* 增加职工记录 */
case 2:
Del(list);
break;/* 删除职工记录 */
case 3:
Qur(list);
break;/* 查询职工记录 */
case 4:
Modify(list);
break;/* 修改职工记录 */
case 5:
Insert(list);
break;/*插入职工记录*/
case 6:
Tongji(list);
break;/*统计职工记录*/
case 7:
Sort(list);
break;/*排序职工记录*/
case 8:
Save(list);
break;/* 保存职工记录 */
case 9:
system("cls");
Disp(list);
break; /*显示职工记录*/ default:
Wrong();
getchar();
break;
} //switch(choose)
}//while(1)
} //main()
/* */。