#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>typedef struct Student
{
char name[20];
char stuNum[20];
int score1;
int score2;
int score3;
double aver;
}student;
typedef struct _Node
{
student stu;
struct _Node* pnext;
}Node;
Node *g_phead=NULL;
void welcome();
void inputstudent();//录入
void outputstudent();//输出
void savestudent();//保存
void readstudent();//导入读取
int countstudent();//统计人数
Node *Findstudent();//按姓名查找
void modifystudent();//按学号修改
void Deletestudent();//按学号删除
void sort();//按平均成绩排序(降序)
void sortbyxuehao();//按学号排序(升序)
void charu();//插入
void sortbyshunxu();//按顺序插入int main()
{
char ch;
while(1)
{
welcome();
ch=getch();
switch(ch)
{
case '1':{ inputstudent();
break;}
case '2':{outputstudent();
break;}
case '3':{savestudent();
break;}
case '4':{readstudent();
break;}
case '5':{
printf("学生总人数为%d",countstudent());
system("pause");
system("cls");
break;}
case '6':{
Node *p=Findstudent();
if(p!=NULL)
{
printf("******************************************************************\n");
printf("*\t\t\t欢迎使用学生成绩管理系统\t\t*\n");
printf("*****************************************************************\n");
printf("*\t学号\t*\t姓名\t*\t成绩1\t*\t成绩2\t*\t成绩3\t*\t平均成绩\t*\n");
printf("*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\t%d\t*\t%.2f\t*\n",p->stu.stuNum,p->stu.name,p->stu.score1,p->stu.score2,p->stu.score3,p->stu.aver);
system("pause");
system("cls");
}
else{ printf("未找到该学员信息");
system("pause");
system("cls");}
break;}
case '7':modifystudent();
break;
case '8':Deletestudent();
break;
case '9':sort();
break;
case 'j':sortbyxuehao();
break;
case 'k':
sort();
charu();
break;
case '0':printf("byebye!!!\n");
return 0;
}
}
return 0;
}
void welcome ()
{
printf("*****************************************\n");
printf("*\t欢迎使用学生成绩管理系统\t*\n");
printf("*****************************************\n");
printf("*\t\t请选择功能列表\t\t*\n");
printf("*****************************************\n");
printf("*\t\t1.录入学生信息\t\t*\n");
printf("*\t\t2.打印学生信息\t\t*\n");
printf("*\t\t3.保存学生信息\t\t*\n");
printf("*\t\t4.读取学生信息\t\t*\n");
printf("*\t\t5.统计所有学生人数\t*\n");
printf("*\t\t6.按姓名查找学生信息\t\t*\n");
printf("*\t\t7.修改学生信息\t\t*\n");
printf("*\t\t8.删除学生信息\t\t*\n");
printf("*\t\t9.学生成绩排序\t\t*\n");
printf("*\t\tj.学生学号排序\t\t*\n");
printf("*\t\tk.插入学生信息\t\t*\n");
printf("*\t\t0.退出程序\t\t*\n");
printf("*****************************************\n");
}
void inputstudent ()
{
Node *pNewNode=(Node*)malloc(sizeof(Node));
pNewNode->pnext=NULL;
if(g_phead==NULL)
{g_phead=pNewNode;}
else
{
pNewNode->pnext=g_phead;
g_phead=pNewNode;
}printf("请输入学生姓名:\n");
scanf("%s",pNewNode->stu.name);
printf("请输入学生学号\n");
scanf("%s",&pNewNode->stu.stuNum);
printf("请输入学生成绩\n");
scanf("%d",&pNewNode->stu.score1);
printf("请输入学生成绩\n");
scanf("%d",&pNewNode->stu.score2);
printf("请输入学生成绩\n");
scanf("%d",&pNewNode->stu.score3);
printf("学生信息录入成功|\n");
pNewNode->stu.aver = (pNewNode->stu.score1 + pNewNode->stu.score2 + pNewNode->stu.score3)/3;
system("pause");
system("cls");
}
void outputstudent()
{
Node* p=g_phead;
printf("******************************************************************\n");
printf("*\t\t\t欢迎使用学生成绩管理系统\t\t*\n");
printf("*****************************************************************\n");
printf("*\t学号\t*\t姓名\t*\t成绩1\t*\t成绩2\t*\t成绩3\t*\t平均成绩¨\t*\n");
while(p!=NULL)
{
printf("*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\t%d\t*\t%.2f\t*\n",p->stu.stuNum,p->stu.name,p->stu.score1,p->stu.score2,p->stu.score3,p->stu.aver);
p=p->pnext;
}
system("pause");
system("cls");
}
void savestudent()
{
Node *p=g_phead;
FILE *fp= fopen("./study.txt","w");
if(fp==NULL){printf("打开文件失败");}
while(p!=NULL)
{
fwrite(&p->stu,1,sizeof(student),fp);
p=p->pnext;
}
fclose(fp);printf("数据保存成功|");
system("pause");
system("cls");
}
void readstudent()
{
student stu;
FILE *fp= fopen("./study.txt","r");
if(fp==NULL)
{printf("打开文件失败?");return;}while(fread(&stu,1,sizeof(student),fp))
{
Node *pNewNode=(Node*) malloc(sizeof(Node));
pNewNode->pnext=NULL;
memcpy(pNewNode,&stu,sizeof(student));
if(g_phead==NULL)
{g_phead=pNewNode;}
else
{
pNewNode->pnext=g_phead;
g_phead=pNewNode;
}
}
fclose(fp);
printf("加载数据成功|.\n");
system("pause");
system("cls");
}
int countstudent()
{
int ncount=0;
Node *p=g_phead;
while(p!=NULL)
{
ncount++;
p=p->pnext;
}
return ncount;
}
Node *Findstudent()
{
Node *p=g_phead;
char szName[20];
printf("请输入需要查找学生的姓名:\n");
scanf("%s",szName);
while(p!=NULL)
{
if(0==strcmp(p->stu.name,szName))
{return p;}
p=p->pnext;
}
return p;
}
void modifystudent()
{
Node *p=g_phead;
char nStuNum[20];
printf("请输入需要查找学生的学号:\n");
scanf("%s",&nStuNum);
while(p!=NULL)
{
if(0==strcmp(p->stu.stuNum,nStuNum))
{
printf("请输入要修改的学生姓名3门成绩:\n");
scanf("%s %d %d %d",p->stu.name,&p->stu.score1,&p->stu.score2,&p->stu.score3);
p->stu.aver = (p->stu.score1 + p->stu.score2 + p->stu.score3)/3;
printf("修改成功");
break;
}
p=p->pnext;
}
if(p==NULL)
{
printf("没有找到该学生信息:\n");
}
}
void Deletestudent()
{
Node *p1=NULL,*p2=NULL,*p=g_phead;
char nStuNum[20];
printf("请输入需要删除学生的学号:\n");
scanf("%s",nStuNum);
if(0==strcmp(g_phead->stu.stuNum,nStuNum))
{
p1=g_phead;
g_phead=g_phead->pnext;
free(p1);
printf("删除成功");
}
else
{
p2=g_phead;
while(p->pnext!=NULL)
{
if(0==strcmp(p->pnext->stu.stuNum,nStuNum))
{
p2=p->pnext;
p->pnext=p->pnext->pnext;
free(p2);printf("删除成功");
system("pause");
system("cls");
return;
}
p=p->pnext;
}
if(p->pnext==NULL)
{
printf("不存在这个学生");
}
}
system("pause");
system("cls");
}
void sort()
{
int b=0,i;
student a;
Node *p=g_phead;while(p!=NULL)
{b++;p=p->pnext;}printf("成功");
p=g_phead;
for(i=0;i<b-1;i++){
p=g_phead;
while(p->pnext!=NULL)
{
if(p->stu.aver < p->pnext->stu.aver)
{
a=p->stu;
p->stu=p->pnext->stu;
p->pnext->stu=a;
}
p=p->pnext;
}
}
printf("排序成功\n");
system("pause");
system("cls");
}
void sortbyxuehao()
{
int b=0,i;
student a;
Node *p=g_phead;while(p!=NULL)
{b++;p=p->pnext;}printf("成功");
p=g_phead;
for(i=0;i<b-1;i++){
p=g_phead;
while(p->pnext!=NULL)
{
int result = strcmp(p->stu.stuNum,p->pnext->stu.stuNum);
if(result > 0)
{
a=p->stu;
p->stu=p->pnext->stu;
p->pnext->stu=a;
}
p=p->pnext;
}
}
printf("排序成功\n");
system("pause");
system("cls");
}void charu(){
Node *pNewNode=(Node*)malloc(sizeof(Node));
pNewNode->pnext=NULL;
if(g_phead==NULL)
{g_phead=pNewNode;}
else
{
pNewNode->pnext=g_phead;
g_phead=pNewNode;
}
printf("请输入学生姓名:\n");
scanf("%s",pNewNode->stu.name);
printf("请输入学生学号\n");
scanf("%s",&pNewNode->stu.stuNum);
printf("请输入学生成绩\n");
scanf("%d",&pNewNode->stu.score1);
printf("请输入学生成绩\n");
scanf("%d",&pNewNode->stu.score2);
printf("请输入学生成绩\n");
scanf("%d",&pNewNode->stu.score3);
printf("学生信息录入成功|\n");
pNewNode->stu.aver = (pNewNode->stu.score1 + pNewNode->stu.score2 + pNewNode->stu.score3)/3;
system("pause");
system("cls");
sortbyshunxu();//排序
}
void sortbyshunxu()
{
student a;
Node *p=g_phead;
p=g_phead;
while(p->pnext!=NULL)
{
if(p->stu.aver < p->pnext->stu.aver)
{
a=p->stu;
p->stu=p->pnext->stu;
p->pnext->stu=a;
}else if(p->stu.aver >= p->pnext->stu.aver) break;
p=p->pnext;
}
printf("插入成功\n");
system("pause");
system("cls");}
数据结构课设
于 2023-12-13 19:42:01 首次发布