程序代码:
/********************************************** *版权所有 (C)2015,wangxiao * *文件名称:chengjixitong.cpp *文件标识:无 *内容摘要:实现学成成绩的输入、插入、删除、修改、统计和输出 *其他内容:无 *当前版本:V1.0 *作者:王晓 *完成日期:20151224 * *修改记录: *修改日期:20151224 *版本号:V1.0 *修改人:王晓 *修改内容:创建 *************************************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include <conio.h> typedef struct STUDENT { char name[20];//名字 char num[10];//学号 int score;//成绩 struct STUDENT *next; }STUDENT, *StudentList; void Create(StudentList &H);//输入学生成绩 void Insert(StudentList &H);//插入学生成绩 void Delete(StudentList &H);//删除学生成绩 void Locate(StudentList H);//查找学生成绩 void Modify(StudentList H);//修改学生信息 void Sum(StudentList H);//统计学生成绩 void PrintList(StudentList H);//输出学生成绩 /****************************** *功能描述:建立链表,输入并存储数据 *输入参数:姓名、学号、成绩 ********************************/ void Create(StudentList &H) { int a,i; system("cls");//清屏 printf("\t\t**************************************************\n"); printf("\t\t-------------------成绩链表的输入-------------------\n"); printf("输入学生的个数:\n"); scanf("%d",&a); StudentList q=H; for (i=0;i<a;i++) { StudentList p; p= (StudentList )malloc(sizeof(STUDENT)); printf("输入第%d个学生的信息:\n",i+1); printf("\n输入姓名:\t学号:\t成绩:\n"); scanf("%s %s %d",p->name,p->num,&p->score); p->next=NULL; q->next=p; q=q->next; } PrintList(H); printf("按任意键返回主菜单\n"); getch(); } /****************************** *功能描述:插入学生成绩 *输入参数:所要插入的位置 ********************************/ void Insert(StudentList &H) { system("cls");//清屏 printf("\t\t**************************************************\n"); printf("\t\t-------------------学生信息插入操作-------------------\n"); if(!H->next) { printf("错误:链表未创建!\n"); printf("按任意键返回主菜单\n"); getchar(); return ; } int i; printf("插入的位置:"); scanf("%d",&i); StudentList p = H; int j = 0; while (p && j < i-1) { p = p->next; ++j; } if (!p || j > i-1) { printf("输入位置错误!") ; printf("按任意键返回主菜单\n"); getch(); return; } StudentList s = (StudentList )malloc(sizeof(STUDENT)); printf("\n输入姓名:\t学号:\t成绩:\n"); scanf("%s %s %d",s->name,s->num,&s->score); s->next = p->next; p->next = s; PrintList(H); printf("按任意键返回主菜单\n"); getchar(); } /****************************** *功能描述:删除学生成绩 *输入参数:所要删除的位置 ********************************/ void Delete(StudentList &H) //删除节点 { system("cls");//清屏 printf("\t\t**************************************************\n"); printf("\t\t-------------------学生信息删除操作-------------------\n"); if(!H->next) { printf("错误:链表未创建!\n"); printf("按任意键返回主菜单\n"); getchar(); return ; } int i; printf("输入要删除的位置:"); scanf("%d",&i); StudentList p = H; int j = 0; while (p->next && j < i-1) { p = p->next; ++j; } if (!p->next || j > i-1) { printf("输入位置错误!") ; printf("按任意键返回主菜单\n"); getch(); return; } StudentList q=p->next; p->next=q->next; free(q); PrintList(H); printf("按任意键返回主菜单\n"); getchar(); } /****************************** *功能描述:查找学生成绩 *输入参数:学号 ********************************/ void Locate(StudentList H) { system("cls");//清屏 printf("\t\t**************************************************\n"); printf("\t\t-------------------学生信息查询操作-------------------\n"); if(!H->next) { printf("错误:链表未创建!\n"); printf("按任意键返回主菜单\n"); getchar(); return ; } char num[10]; printf("\n输入要查询的学号:"); scanf("%s",num); StudentList p=H->next; int i=1; while(p) { if(!strcmp(num,p->num)) { printf("找到了,它是链表的第%d个元素\n",i); printf("\n姓名\t学号\t成绩\n"); printf("%s\t%s\t%d\t\n",p->name,p->num,p->score); getchar(); break; } p=p->next; i++; } if (!p) { printf("你要查询的学号不存在!!\n"); getchar(); } printf("按任意键返回主菜单\n"); getchar(); } /****************************** *功能描述:修改学生成绩 *输入参数:要修改的位置 ********************************/ void Modify(StudentList H) { system("cls");//清屏 printf("\t\t**************************************************\n"); printf("\t\t-------------------学生信息修改操作-------------------\n"); if(!H->next) { printf("错误:链表未创建!\n"); printf("按任意键返回主菜单\n"); getchar(); return ; } int i; printf("输入要修改的位置:"); scanf("%d",&i); StudentList p = H; int j = 0; while (p->next && j < i-1) { p = p->next; ++j; } if (!p->next || j > i-1) { printf("输入位置错误!") ; printf("按任意键返回主菜单\n"); getch(); return; } StudentList q=p->next; char name[20];char num[10];int score; printf("\n输入更改的 姓名\t学号\t成绩:\n"); scanf("%s %s %d",name,num,&score); strcpy(q->name,name); strcpy(q->num,num); q->score=score; PrintList(H); printf("按任意键返回主菜单\n"); getchar(); } /****************************** *功能描述:统计学生成绩 *输入参数:无 ********************************/ void Sum(StudentList H) { system("cls");//清屏 printf("\t\t**************************************************\n"); printf("\t\t-------------------学生成绩统计-------------------\n"); StudentList t=H->next; if(!t) { printf("信息系统空,请添加!\n"); return ; } printf("不及格的学生是:\r\n"); printf("姓名\t学号\t成绩:\n"); while(t) { if (t->score<60) { printf("%s\t%s\t%d\t\n",t->name,t->num,t->score); } t=t->next; } t=H->next; printf("\n成绩为“及格”的学生是:\r\n"); printf("姓名\t学号\t成绩:\n"); while(t) { if (t->score>=60&&t->score<=70) { printf("%s\t%s\t%d\t\n",t->name,t->num,t->score); } t=t->next; } t=H->next; printf("\n成绩为“中”的学生是:\r\n"); printf("姓名\t学号\t成绩:\n"); while(t) { if (t->score>=70&&t->score<80) { printf("%s\t%s\t%d\t\n",t->name,t->num,t->score); } t=t->next; } t=H->next; printf("\n成绩为“良”的学生是:\r\n"); printf("姓名\t学号\t成绩:\n"); while(t) { if (t->score>=80&&t->score<90) { printf("%s\t%s\t%d\t\n",t->name,t->num,t->score); } t=t->next; } t=H->next; printf("\n成绩为“优”的学生是:\r\n"); printf("姓名\t学号\t成绩:\n"); while(t) { if (t->score>=90) { printf("%s\t%s\t%d\t\n",t->name,t->num,t->score); } t=t->next; } printf("按任意键返回主菜单\n"); getchar(); } /****************************** *功能描述:输出学生成绩 *输出参数:姓名、学号、成绩 ********************************/ void PrintList(StudentList H) //输出链表 { StudentList t=H->next; if(!t) { printf("信息系统空,请添加!\n"); return ; } printf("\n姓名\t学号\t成绩\n"); while(t) { printf("%s\t%s\t%d\t\n",t->name,t->num,t->score); t=t->next; } printf("\n"); getchar(); } void main() { StudentList H; H = (StudentList )malloc(sizeof(STUDENT)); //分配头结点的空间 H->next = NULL; while(1) { system("cls");//清屏 printf("======================学生成绩管理系统======================\n"); printf("\n"); printf(" 1.建立成绩链表\n 2.插入\n 3.删除\n"); printf(" 4.查询\n 5.修改\n 6.统计\n 0.退出\n"); printf("请选择:"); switch(getch()) { case '1': Create(H); break; case '2': Insert(H); break; case '3': Delete(H); break; case '4': Locate(H); break; case '5': Modify(H); break; case '6': Sum(H); break; case '0': exit(0); } } }
运行结果: