这个其实是我之前为了进入学校的实验室而写的一个小项目,关于需要实现的功能(在菜单里)和具体思路就都写在代码里了,所以直接看完整的代码:
#include#include #include #include #include #include typedef struct project{ char progname[50]; char host[50]; char members[100]; char conductor[50]; int membernum; char progkind[50]; char prognum[50]; struct project *next; }PROJECT; //定义一些全局变量 char prognam[50]; char hos[50]; char member[100]; char conducto[50]; int membernu; char progkin[50]; char prognu[50]; //随机输入一个七个字符长度的项目编号 char*prognumBuild() { char mysql1[]="0123456789"; char mysql2[]="abcdefghljklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i; int num_size1; int num_size2; int random; char *prognum=(char *)malloc(sizeof(char)); srand((unsigned)time(NULL)); num_size1=rand()%1+6; num_size2=rand()%1+1; for(i=0;i next=NULL; } //查找尾结点 PROJECT *findLast(PROJECT *L) { PROJECT *pt; pt=L; while(pt->next!=NULL) { pt=pt->next; } return pt; } //插入项目信息 void prog_add(PROJECT *&L) { int num=0; PROJECT *prePt,*pt; pt=(PROJECT *)malloc(sizeof(PROJECT)); printf("项目名为:"); scanf("%s",prognam); strcpy(pt->progname,prognam); printf("负责人为:"); scanf("%s",hos); strcpy(pt->host,hos); printf("队员为:"); scanf("%s",member); strcpy(pt->members,member); printf("指导老师为:"); scanf("%s",conducto); strcpy(pt->conductor,conducto); printf("队员人数为:"); num=scanf("%d",&membernu); while(num==0) { getchar(); printf("输入非法,请重新输入一个数字:"); num=scanf("%d",&membernu); } pt->membernum=membernu; printf("项目类型为:"); scanf("%s",progkin); strcpy(pt->progkind,progkin); printf("项目编号为:%sn",prognumBuild()); strcpy(pt->prognum,prognumBuild()); prePt=findLast(L); prePt->next=pt; pt->next=NULL; printf("增加成功!n"); } //浏览全部项目信息 void display(PROJECT *&L) { PROJECT *pt=L->next; if(pt==NULL) { printf("还没有项目信息,请增加项目信息!n"); return; } while(pt) { printf("项目名为:%st",pt->progname); printf("负责人为:%st",pt->host); printf("队员为:%st",pt->members); printf("指导老师为:%st",pt->conductor); printf("队员人数为:%dt",pt->membernum); printf("项目类别为:%st",pt->progkind); printf("项目编号为:%sn",pt->prognum); pt=pt->next; } } //按项目编号降序输出项目信息 void low_print(PROJECT *L) { PROJECT *p,*q,*r; r=L->next; while(r!=NULL) { p=r; q=r->next; PROJECT *temp; InitList(temp); while(q!=NULL) { if(strcmp(p->prognum,q->prognum)<0) { //项目名 strcpy(temp->progname,p->progname); strcpy(p->progname,q->progname); strcpy(q->progname,temp->progname); //负责人 strcpy(temp->host,p->host); strcpy(p->host,q->host); strcpy(q->host,temp->host); //队员 strcpy(temp->members,p->members); strcpy(p->members,q->members); strcpy(q->members,temp->members); //指导老师 strcpy(temp->conductor,p->conductor); strcpy(p->conductor,q->conductor); strcpy(q->conductor,temp->conductor); //队员人数 temp->membernum=p->membernum; p->membernum=q->membernum; q->membernum=temp->membernum; //项目类型 strcpy(temp->progkind,p->progkind); strcpy(p->progkind,q->progkind); strcpy(q->progkind,temp->progkind); //项目编号 strcpy(temp->prognum,p->prognum); strcpy(p->prognum,q->prognum); strcpy(q->prognum,temp->prognum); } q=q->next; } r=r->next; } printf("排序后的项目信息为:n"); display(L); } //模糊搜索,按项目编号删除项目信息 void prog_delete(PROJECT *L) { char ch[10]; PROJECT *pt,*prePt; prePt=L; pt=prePt->next; printf("请输入一个关键字:"); scanf("%s",&ch); int flag=0; while(pt!=NULL) { if(strstr(pt->prognum,ch)!=NULL) { printf("需要删除项目的项目编号为:%sn",pt->prognum); prePt->next=pt->next; free(pt); flag=1; break; } else { prePt=pt; pt=pt->next; } } if(flag==1) { printf("删除项目信息成功!n"); } else { printf("抱歉,未找到相关的项目信息!n"); } } //模糊搜索,按项目编号修改项目信息 void prog_change(PROJECT *L) { char ch[10]; PROJECT *pt; pt=L->next; printf("请输入一个关键字:n"); scanf("%s",&ch); int flag=0; while(pt!=NULL) { if(strstr(pt->prognum,ch)!=NULL) { printf("%s",pt->prognum); flag=1; printf("请输入需要修改的项目信息:(1.项目名 2.负责人 3.队员 4.指导老师 5.队员人数 6.项目类别)n"); int choose; scanf("%d",&choose); switch(choose) { case 1: printf("请输入您要修改的项目名:n"); scanf("%s",prognam); printf("修改后的项目名为:%sn",prognam); strcpy(pt->progname,prognam); printf("修改成功!n"); break; case 2: printf("请输入您要修改的负责人:n"); scanf("%s",hos); printf("修改后的负责人为:%sn",hos); strcpy(pt->host,hos); printf("修改成功!n"); break; case 3: printf("请输入您要修改的队员:n"); scanf("%s",member); printf("修改后的队员为:%sn",member); strcpy(pt->members,member); printf("修改成功!n"); break; case 4: printf("请输入要修改的指导老师:n"); scanf("%s",conducto); printf("修改后的指导老师为:%sn",conducto); strcpy(pt->conductor,conducto); printf("修改成功!n"); break; case 5: printf("请输入要修改的队员人数:n"); scanf("%d",&membernu); printf("修改后的队员人数为:%dn",membernu); pt->membernum=membernu; printf("修改成功!n"); break; case 6: printf("请输入要修改的项目类别:n"); scanf("%s",progkin); printf("修改后的项目类别为:%sn",progkin); strcpy(pt->progkind,progkin); printf("修改成功!n"); break; default : printf("请重新输入1-6的数字n"); break; } } pt=pt->next; } if(flag==0) { printf("抱歉,未找到相关的项目信息!n"); } } //按项目类别查询项目信息 void kind_search(PROJECT *L) { int flag=0; PROJECT *pt; pt=L->next; printf("请输入相关项目类别,便于您查找相关项目信息:n"); char s[100]; scanf("%s",s); while(pt!=NULL) { if(strcmp(s,pt->progkind)==0) { flag=1; printf("该项目的项目名为:%sn",pt->progname); printf("该项目的负责人为:%sn",pt->host); printf("该项目的队员为:%sn",pt->members); printf("该项目的指导老师为:%sn",pt->conductor); printf("该项目的队员人数为:%dn",pt->membernum); printf("该项目的项目编号为:%sn",pt->prognum); break; } else { pt=pt->next; } } if(flag==0) { printf("抱歉,未找到相关的项目信息!n"); } } //模糊搜索,按项目编号查询项目信息 void num_search(PROJECT *L) { char ch[10]; PROJECT *pt; pt=L->next; printf("请输入一个关键字:"); scanf("%s",ch); int flag=0; while(pt!=NULL) { if(strstr(pt->prognum,ch)!=NULL) { flag=1; printf("%sn",pt->prognum); printf("该项目的项目名为:%sn",pt->progname); printf("该项目的负责人为:%sn",pt->host); printf("该项目的队员为:%sn",pt->members); printf("该项目的指导老师为:%sn",pt->conductor); printf("该项目的队员人数为:%dn",pt->membernum); printf("该项目的项目类别为:%sn",pt->progkind); } pt=pt->next; } if(flag==0) { printf("抱歉,未找到相关的项目信息!n"); } } //将项目信息保存在文本文件中 void saveProjectFile(PROJECT *&L) { FILE *fp; PROJECT *pt; pt=L->next; if((fp=fopen("project.txt","w"))==NULL)//对文件进行写操作 { printf("文件不能打开!n"); exit(0); } while(pt!=NULL) { fprintf(fp,"%s %s %s %s %d %s %sn",pt->progname,pt->host,pt->members,pt->conductor,pt->membernum,pt->progkind,pt->prognum); pt=pt->next; printf("保存成功!n"); } fclose(fp); } int main() { PROJECT *L; InitList(L); int i,n; int num=1; printf("请输入需要管理的项目信息数量:"); num=scanf("%d",&n); while(num==0) { getchar(); printf("输入非法,请重新输入一个数字:"); num=scanf("%d",&n); } for(i=0;i 这是我大一上学期期中时写的项目,所以可能会有许多还可以改进的地方,如果小伙伴们有什么更好的建议,欢迎在评论区写下你们的宝贵建议,谢谢各位小伙伴!



