程序代码:
/**********************************************
*版权所有 (C)2015,wangxiao
*
*文件名称:chengjixitong.cpp
*文件标识:无
*内容摘要:实现学成成绩的输入、插入、删除、修改、统计和输出
*其他内容:无
*当前版本:V1.0
*作者:王晓
*完成日期:20151224
*
*修改记录:
*修改日期:20151224
*版本号:V1.0
*修改人:王晓
*修改内容:创建
*************************************************/
#include
#include
#include
#include
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;iname,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);
}
}
}
运行结果: