一个比较完整的学生管理系统,采用文件存储。
先上图片
源码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//学生节点声明
typedef struct _STU
{
char arrStuNum[20];//学号
char arrStuName[20];//姓名
char arrStuSex[20];//性别
char iStuBir[20];//出生年月
char iStuPhone[12];//电话
char arrStuAdd[100];//住址
//成绩管理
char arrStuCourse_1[5];//成绩1
char arrStuCourse_2[5];//成绩2
char arrStuCourse_3[5];//成绩3
char arrStuCourse_4[5];//成绩4
char arrStuCourse_5[5];//成绩5
struct _STU* pNext;
} StuNode;
typedef struct _Stu_Score
{
char arrStuNum[20];//学号
char arrStuName[20];//姓名
char arrStuCourse_1[5];//成绩1
char arrStuCourse_2[5];//成绩2
char arrStuCourse_3[5];//成绩3
char arrStuCourse_4[5];//成绩4
char arrStuCourse_5[5];//成绩5
int sum;
}StuCore;
//声明头尾指针
StuNode* g_pHead = NULL;
StuNode* g_pEnd = NULL;
//学生信息管理菜单
void Menu();
//添加学生
void AddStuMsg(char* arrStuNum, char arrStuName[20], char arrStuSex[20], char iStuPhone[12], char arrStuAdd[100], char iStuBir[20], char arrStuCourse_1[5], char arrStuCourse_2[5], char arrStuCourse_3[5], char arrStuCourse_4[5], char arrStuCourse_5[5]);
void FreeLinkData();//释放链表
void ShowStu();//打印数据
StuNode* FindStuByNum(char* arrStuNum);//查找指定节点根据学号
StuNode* FindStuByName(char arrStuName[20]);//查找指定节点根据姓名
void ChangeStuByNum(StuNode * LInk);//修改指定学生信息
void DeleteStu(StuNode* LInk);//删除指定学生信息
//保存信息进文件
void SaveStuToFile();
//读取文件中学生信息
void ReadStuFromFile();
void Menu_score();//学生成绩管理菜单
void AddStuCourse(StuNode * inum);//成绩添加
void ChangeStuByNumToScore(StuNode* LInk);//修改指定学生成绩
void ShowStuToScore();//打印学生成绩数据
void PaiXu();//成绩排序
void Menu_main();//主页面
int main(void)
{
//读取文件中学生信息
ReadStuFromFile();
Menu_main();
//调用保存函数
SaveStuToFile();
printf("系统已成功退出!\n");
//释放链表
FreeLinkData();
system("pause");
return 0;
}
//添加一个学生信息
void AddStuMsg(char* arrStuNum, char arrStuName[20], char arrStuSex[20], char iStuPhone[12], char arrStuAdd[100], char iStuBir[20], char arrStuCourse_1[5], char arrStuCourse_2[5], char arrStuCourse_3[5], char arrStuCourse_4[5], char arrStuCourse_5[5])
{
//参数合法性检测
if (NULL == arrStuNum || NULL == arrStuName || iStuBir == NULL || NULL == arrStuSex || iStuPhone==NULL || arrStuAdd == NULL)
{
printf("学生信息输入错误");
return;
}
StuNode* p = (StuNode*)malloc(sizeof(StuNode));
if (p != NULL)
{
strcpy(p->arrStuNum, arrStuNum);
strcpy(p->arrStuName, arrStuName);
strcpy(p->arrStuAdd, arrStuAdd);
strcpy(p->arrStuSex, arrStuSex);
strcpy(p->iStuBir, iStuBir);
strcpy(p->iStuPhone, iStuPhone);
strcpy(p->arrStuCourse_1, arrStuCourse_1);
strcpy(p->arrStuCourse_2, arrStuCourse_2);
strcpy(p->arrStuCourse_3, arrStuCourse_3);
strcpy(p->arrStuCourse_4, arrStuCourse_4);
strcpy(p->arrStuCourse_5, arrStuCourse_5);
p->pNext = NULL;
if (NULL == g_pHead || NULL == g_pEnd)
{
g_pHead = p;
}
else
{
g_pEnd->pNext = p;
}
g_pEnd = p;
}
}
void FreeLinkData()
{
StuNode* pt = g_pHead;
while (pt != NULL)
{
StuNode* py = pt;
pt = pt->pNext;
free(py);
}
g_pHead = NULL;
g_pEnd = NULL;
}
void ShowStu()
{
if (g_pHead != NULL)
{
StuNode* ptmp = g_pHead;
while (ptmp != NULL)
{
printf("学号:%s 姓名:%s 性别:%s 出生年月: %s 电话: %s 住址: %s\n", ptmp->arrStuNum, ptmp->arrStuName, ptmp->arrStuSex, ptmp->iStuBir, ptmp->iStuPhone, ptmp->arrStuAdd);
ptmp = ptmp->pNext;
}
}
else
printf("链表为空\n");
}
void Menu()
{
system("cls");
char arrStuCourse_1[5] = { 0 };//成绩1
char arrStuCourse_2[5] = { 0 };//成绩2
char arrStuCourse_3[5] = { 0 };//成绩3
char arrStuCourse_4[5] = { 0 };//成绩4
char arrStuCourse_5[5] = { 0 };//成绩5
char arrStuNum[20] = { 0 };
char arrStuName[20] = { 0 };
char arrStuSex[20] = { 0 };//性别
char iStuBir[20] = { 0 };//出生年月
char iStuPhone[12] = { 0 };//电话
char arrStuAdd[100] = { 0 };//住址
int Flag = 1;
printf("*********************学生信息管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.增加一个学生信息 ***\n");
printf("*** 2.查找指定学生信息 ***\n");
printf("*** 3.修改指定学生信息 ***\n");
printf("*** 4.保存信息到文件中 ***\n");
printf("*** 5.删除指定学生信息 ***\n");
printf("*** 6.恢复删除学生信息 ***\n");
printf("*** 7.显示所有学生信息 ***\n");
printf("*** 0.返回上一级 ***\n");
printf("**********************************************************\n");
int nOrder = -1;
while (Flag)
{
printf("请输入1--0之间的指令操作:\n");
fflush(stdin);
scanf("%d", &nOrder); while (getchar() != '\n');
switch (nOrder)
{
case 1:
printf("请选择1.输入数据 2.返回\n");
int iqq = -1;
scanf("%d", &iqq);
switch (iqq)
{
case 1:
//添加一个学生的信息
printf("输入学号:\n");
scanf("%s", arrStuNum);
printf("输入姓名:\n");
scanf("%s", arrStuName);
printf("输入性别:\n");
scanf("%s", arrStuSex);
printf("输入出生年月:\n");
scanf("%s", iStuBir);
printf("输入住址:\n");
scanf("%s", arrStuAdd);
printf("输入电话:\n");
scanf("%s", iStuPhone);
AddStuMsg(arrStuNum, arrStuName, arrStuSex, iStuPhone, arrStuAdd, iStuBir, arrStuCourse_1, arrStuCourse_2, arrStuCourse_3, arrStuCourse_4, arrStuCourse_5);
break;
case 2:
break;
default:
break;
}
break;
case 2:
//查找学生信息
printf("请选择 1:学号查询,2:学生姓名查询\n");
int lookqq = -1;
scanf("%d", &lookqq);
if (lookqq==1)
{
printf("输入学生学号:\n");
scanf("%s", arrStuNum);
StuNode* qq = NULL;
qq=FindStuByNum(arrStuNum);
if (qq != NULL)
{
printf("学号:%s 姓名:%s 性别:%s 出生年月: %s 电话: %s 住址: %s\n", qq->arrStuNum, qq->arrStuName, qq->arrStuSex, qq->iStuBir, qq->iStuPhone, qq->arrStuAdd);
}
}
else if (lookqq==2)
{
printf("输入学生姓名:\n");
scanf("%s", arrStuName);
StuNode* qq = NULL;
qq = FindStuByName(arrStuName);
if (qq != NULL)
{
printf("学号:%s 姓名:%s 性别:%s 出生年月: %s 电话: %s 住址: %s\n", qq->arrStuNum, qq->arrStuName, qq->arrStuSex, qq->iStuBir, qq->iStuPhone, qq->arrStuAdd);
}
}
else
{
printf("请输入正确指令!\n");
}
break;
case 3:
ChangeStuByNum(g_pHead);
break;
case 4:
//保存学生信息
SaveStuToFile();
break;
case 5:
//删除操做
DeleteStu(g_pHead);
break;
case 6:
//恢复删除的学生
//清空链表
FreeLinkData();
//添加节点
ReadStuFromFile();
printf("恢复成功!\n");
break;
case 7:
ShowStu();
break;
case 0:
return;
Flag = 0;
break;
default:
Menu();
printf("请输入正确的指令\n");
break;
}
}
}
void Menu_main()
{
int falg = 1;
while (falg)
{
system("cls");
printf("*********************XMUT学生管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.进入学生信息管理 ***\n");
printf("*** 2.进入学生成绩管理 ***\n");
printf("*** 3.退出系统 ***\n");
printf("*********************谢谢您的使用!***********************\n");
int iOrder = -1;
printf("请输入1-3指令操作:\n");
scanf("%d", &iOrder);
while (getchar() != '\n');
switch (iOrder)
{
case 1:
Menu();
break;
case 2:
Menu_score();
break;
case 3:
printf("正在保存. . . . . \n");
falg = 0;
break;
default:
printf("请输入正确的指令\n");
break;
}
}
}
StuNode* FindStuByNum(char* arrStuNum)
{
if (NULL == arrStuNum)
{
printf("学号参数错误");
return NULL;
}
if (NULL == g_pEnd || NULL == g_pHead)
{
printf("链表为空\n");
return NULL;
}
StuNode* p = g_pHead;
while (p!=NULL)
{
if (strcmp(p->arrStuNum, arrStuNum) == 0)
return p;
p = p->pNext;
}
printf("查无此节点\n");
return NULL;
}
StuNode* FindStuByName(char arrStuName[20])
{
if (NULL == arrStuName)
{
printf("学号参数错误\n");
return NULL;
}
if (NULL == g_pEnd || NULL == g_pHead)
{
printf("链表为空\n");
return NULL;
}
StuNode* p = g_pHead;
while (p != NULL)
{
if (strcmp(p->arrStuName, arrStuName) == 0)
return p;
p = p->pNext;
}
printf("查无此节点\n");
return NULL;
}
void ChangeStuByNum(StuNode* LInk)
{
//查找学生信息
printf("请选择 1:通过学号修改,2:通过学生姓名修改\n");
int lookqq = -1;
scanf("%d", &lookqq);
char arrStuNum[20];//学号
char arrStuName[20] = { 0 };
char arrStuSex[20] = { 0 };//性别
char iStuBir[20] = { 0 };//出生年月
char iStuPhone[12] = { 0 };//电话
char inum[20] = { 0 };
char arrStuAdd[100] = { 0 };//住址
if (lookqq == 1)
{
printf("输入学生学号:\n");
scanf("%s", inum);
StuNode* qq = NULL;
qq = FindStuByNum(inum);
if (qq != NULL)
{
printf("请选择修改该生的哪项内容:\n1:姓名 2: 性别 3: 出生年月 4: 电话 5: 家庭住址 6:结束修改 7:学号\n");
int flag = 1;
while (flag)
{
int w = -1;
printf("请选择修改操作指令\n");
scanf("%d", &w);
switch (w)
{
case 1:
printf("请输入新的姓名\n");
scanf("%s", arrStuName);
strcpy(qq->arrStuName, arrStuName);
printf("修改成功!\n");
break;
case 2:
printf("请输入新的性别\n");
scanf("%s", arrStuSex);
strcpy(qq->arrStuSex, arrStuSex);
printf("修改成功!\n");
break;
case 3:
printf("请输入新的出生年月\n");
scanf("%s", iStuBir);
strcpy(qq->iStuBir, iStuBir);
printf("修改成功!\n");
break;
case 4:
printf("请输入新的电话\n");
scanf("%s", iStuPhone);
strcpy(qq->iStuPhone, iStuPhone);
printf("修改成功!\n");
break;
case 5:
printf("请输入新的家庭住址\n");
scanf("%s", arrStuAdd);
strcpy(qq->arrStuAdd, arrStuAdd);
printf("修改成功!\n");
break;
case 6:
flag = 0;
system("cls");
printf("*********************学生信息管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.增加一个学生信息 ***\n");
printf("*** 2.查找指定学生信息 ***\n");
printf("*** 3.修改指定学生信息 ***\n");
printf("*** 4.保存信息到文件中 ***\n");
printf("*** 5.删除指定学生信息 ***\n");
printf("*** 6.恢复删除学生信息 ***\n");
printf("*** 7.显示所有学生信息 ***\n");
printf("*** 0.返回上一级 ***\n");
printf("**********************************************************\n");
break;
case 7:
printf("请输入新的学号\n");
scanf("%s", arrStuNum);
strcpy(qq->arrStuNum, arrStuNum);
printf("修改成功!\n");
break;
default:
break;
}
}
}
return;
}
else if(lookqq == 2)
{
printf("输入学生姓名:\n");
scanf("%s", inum);
StuNode* qq = NULL;
qq = FindStuByName(inum);
if (qq != NULL)
{
printf("请选择修改该生的哪项内容:\n1:姓名 2: 性别 3: 出生年月 4: 电话 5: 家庭住址 6:结束修改 7:学号\n");
int flag = 1;
while (flag)
{
int w = -1;
printf("请输入修改指令\n");
scanf("%d", &w);
switch (w)
{
case 1:
printf("请输入新的姓名\n");
scanf("%s", arrStuName);
strcpy(qq->arrStuName, arrStuName);
printf("修改成功!\n");
break;
case 2:
printf("请输入新的性别\n");
scanf("%s", arrStuSex);
strcpy(qq->arrStuSex, arrStuSex);
printf("修改成功!\n");
break;
case 3:
printf("请输入新的出生年月\n");
scanf("%s", iStuBir);
strcpy(qq->iStuBir, iStuBir);
printf("修改成功!\n");
break;
case 4:
printf("请输入新的电话\n");
scanf("%s", iStuPhone);
strcpy(qq->iStuPhone, iStuPhone);
printf("修改成功!\n");
break;
case 5:
printf("请输入新的家庭住址\n");
scanf("%s", arrStuAdd);
strcpy(qq->arrStuAdd, arrStuAdd);
printf("修改成功!\n");
break;
case 6:
flag = 0;
system("cls");
printf("*********************学生信息管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.增加一个学生信息 ***\n");
printf("*** 2.查找指定学生信息 ***\n");
printf("*** 3.修改指定学生信息 ***\n");
printf("*** 4.保存信息到文件中 ***\n");
printf("*** 5.删除指定学生信息 ***\n");
printf("*** 6.恢复删除学生信息 ***\n");
printf("*** 7.显示所有学生信息 ***\n");
printf("*** 0.返回上一级 ***\n");
printf("**********************************************************\n");
break;
case 7:
printf("请输入新的学号\n");
scanf("%s", arrStuNum);
strcpy(qq->arrStuNum, arrStuNum);
printf("修改成功!\n");
break;
default:
break;
}
}
}
return;
}
}
void DeleteStu(StuNode* LInk)
{
//参数合法性检测
if (g_pHead == NULL || g_pEnd == NULL)
{
printf("链表为空,无法删除");
return;
}
printf("请选择 1:通过学号删除,2:通过学生姓名删除\n");
int lookqq = -1;
char inum[20] = { 0 };
char iname[20] = { 0 };
printf("请输入操做指令\n");
scanf("%d", &lookqq);
switch (lookqq)
{
case 1:
printf("请输入学号\n");
scanf("%s", inum);
if (strcmp(g_pHead->arrStuNum, inum) == 0)
{
StuNode* op = g_pHead;
g_pHead = op->pNext;
free(op);
printf("删除成功!\n");
return;
}
else
{
StuNode* p = NULL;
p = g_pHead;
while (p->pNext!= NULL)
{
if (strcmp(p->pNext->arrStuNum, inum) == 0)
{
StuNode* pp = p->pNext;
p->pNext = pp->pNext;
free(pp);
printf("删除成功\n");
return;
}
p = p->pNext;
}
}
printf("学号输入有误!\n");
return;
break;
case 2:
printf("请输入姓名\n");
scanf("%s", iname);
if (strcmp(g_pHead->arrStuName, iname) == 0)
{
StuNode* op = g_pHead;
g_pHead = op->pNext;
free(op);
printf("删除成功!\n");
return;
}
else
{
StuNode* jj = NULL;
jj = g_pHead;
while (jj->pNext != NULL)
{
if (strcmp(jj->pNext->arrStuName, iname) == 0)
{
StuNode* pp = jj->pNext;
jj->pNext = pp->pNext;
free(pp);
printf("删除成功!\n");
return;
}
jj = jj->pNext;
}
}
printf("姓名有误!\n");
return;
break;
default:
printf("请输入正确指令!\n");
return;
}
return;
}
void SaveStuToFile()
{
if (g_pHead == NULL)
{
printf("链表为空\n");
return;
}
char strbuff[225] = { 0 };
FILE* pFile = NULL;
//打开文件
pFile = fopen("dat.dat", "wb+");
if (NULL == pFile)
{
printf("文件打开失败");
return;
}
//操做文件指针
StuNode* p = g_pHead;
while (p)
{
//学号复制
strcpy(strbuff, p->arrStuNum);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuName);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuAdd);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuSex);
strcat(strbuff, ".");
strcat(strbuff, p->iStuBir);
strcat(strbuff, ".");
strcat(strbuff, p->iStuPhone);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuCourse_1);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuCourse_2);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuCourse_3);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuCourse_4);
strcat(strbuff, ".");
strcat(strbuff, p->arrStuCourse_5);
fwrite(strbuff,1,strlen(strbuff),pFile);//
fwrite("\r\n", 1, strlen("\r\n"), pFile);//
p = p->pNext;
}
printf("保存成功!\n");
//关闭文件
fclose(pFile);//清空文件指针,写入文件
}
void ReadStuFromFile()
{
FILE* pFile = fopen("dat.dat", "rb+");
if (NULL == pFile)
{
printf("文件打开失败\n");
return;
}
char arrStuCourse_1[5] = { 0 };//成绩1
char arrStuCourse_2[5] = { 0 };//成绩2
char arrStuCourse_3[5] = { 0 };//成绩3
char arrStuCourse_4[5] = { 0 };//成绩4
char arrStuCourse_5[5] = { 0 };//成绩5
char strbuff[225] = { 0 };
char arrStuNum[20] = { 0 };
char arrStuName[20] = { 0 };
char arrStuAdd[100] = { 0 };//住址
char arrStuSex[20] = { 0 };//性别
char iStuBir[22] = { 0 };//出生年月
char iStuPhone[12] = { 0 };//电话
int ncount = 0;
int j = 0;
//读取文件
while(fgets(strbuff, 225, pFile)!=NULL)
{
int i = 0;
ncount = 0;
j = 0;
for(i = 0; strbuff[i] != '\r'; i++)
{
if (0==ncount)//没到点
{
arrStuNum[i] = strbuff[i];
if (strbuff[i] == '.')
{
arrStuNum[i] = '\0';
ncount++;
j = 0;
}
}
else if (1 == ncount)//到第一个点
{
arrStuName[j] = strbuff[i];
if ('.'==strbuff[i])
{
arrStuName[j] = '\0';
ncount++;
j=0;
continue;
}j++;
}
else if (2 == ncount)//到第2个点
{
arrStuAdd[j] = strbuff[i];
if (strbuff[i] == '.')
{
arrStuAdd[j] = '\0';
ncount++;
j=0;
continue;
}
j++;
}
else if (3 == ncount)//到第3个点
{
arrStuSex[j]= strbuff[i];
if (strbuff[i] == '.')
{
arrStuSex[j] = '\0';
ncount++;
j=0;
continue;
}
j++;
}
else if (4 == ncount)//到第4个点
{
iStuBir[j] = strbuff[i];
if (strbuff[i] == '.')
{
iStuBir[j] = '\0';
ncount++;
j = 0;
continue;
}
j++;
}
else if(ncount==5)
{
iStuPhone[j]= strbuff[i];
if (strbuff[i] == '.')
{
iStuPhone[j] = '\0';
ncount++;
j = 0;
continue;
}
j++;
}
else if (ncount == 6)
{
arrStuCourse_1[j] = strbuff[i];
if (strbuff[i] == '.')
{
arrStuCourse_1[j] = '\0';
ncount++;
j = 0;
continue;
}
j++;
}
else if (ncount == 7)
{
arrStuCourse_2[j] = strbuff[i];
if (strbuff[i] == '.')
{
arrStuCourse_2[j] = '\0';
ncount++;
j = 0;
continue;
}
j++;
}
else if (ncount == 8)
{
arrStuCourse_3[j] = strbuff[i];
if (strbuff[i] == '.')
{
arrStuCourse_3[j] = '\0';
ncount++;
j = 0;
continue;
}
j++;
}
else if (ncount == 9)
{
arrStuCourse_4[j] = strbuff[i];
if (strbuff[i] == '.')
{
arrStuCourse_4[j] = '\0';
ncount++;
j = 0;
continue;
}
j++;
}
else
{
arrStuCourse_5[j] = strbuff[i];
j++;
}
}
//插入到链表
AddStuMsg(arrStuNum, arrStuName, arrStuSex, iStuPhone, arrStuAdd, iStuBir, arrStuCourse_1, arrStuCourse_2, arrStuCourse_3, arrStuCourse_4, arrStuCourse_5);
}
fclose(pFile);
}
//下面开始写成绩管理模块
void Menu_score()
{
system("cls");
printf("*********************学生成绩管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.录入学生成绩 ***\n");
printf("*** 2.查询学生成绩 ***\n");
printf("*** 3.修改学生成绩 ***\n");
printf("*** 4.浏览学生成绩 ***\n");
printf("*** 5.学生成绩排序 ***\n");
printf("*** 0.返回上一级 ***\n");
int flag = 1;
while (flag)
{
int iOrder = -1;
printf("请输入1-0指令操作:\n");
scanf("%d", &iOrder); while (getchar() != '\n');
StuNode* Stu_inum = NULL;
char iscore[20] = { 0 };//学号
switch (iOrder)
{
case 1:
printf("请输入学生学号:\n");
scanf("%s", iscore);
StuNode* inum = FindStuByNum(iscore);
if (inum != NULL)
AddStuCourse(inum);
else
printf("没找到该生\n");
break;
case 2 :
printf("请选择1:姓名查找 2: 学号查找\n");
int ilook = -1;
scanf("%d", &ilook);
switch (ilook)
{
case 1:
printf("请输入学生姓名:\n");
scanf("%s", iscore);
Stu_inum = FindStuByName(iscore);
if (Stu_inum != NULL)
printf("学号:%8s 成绩1:%6s 成绩2:%6s 成绩3:%6s 成绩4:%6s 成绩5:%6s \n", Stu_inum->arrStuNum, Stu_inum->arrStuCourse_1, Stu_inum->arrStuCourse_2, Stu_inum->arrStuCourse_3, Stu_inum->arrStuCourse_4, Stu_inum->arrStuCourse_5);
break;
case 2:
printf("请输入学生学号:\n");
scanf("%s", iscore);
Stu_inum = FindStuByNum(iscore);
if (Stu_inum != NULL)
printf("学号:%8s 成绩1:%6s 成绩2:%6s 成绩3:%6s 成绩4:%6s 成绩5:%6s \n", Stu_inum->arrStuNum, Stu_inum->arrStuCourse_1, Stu_inum->arrStuCourse_2, Stu_inum->arrStuCourse_3, Stu_inum->arrStuCourse_4, Stu_inum->arrStuCourse_5);
break;
default:
printf("请输入正确的指令!\n");
break;
}
break;
case 3:
ChangeStuByNumToScore(g_pHead);
break;
case 4:
ShowStuToScore();
break;
case 5:
//成绩排序
PaiXu();
break;
case 0:
flag = 0;
return;
break;
default:
printf("请输入正确的指令!\n");
break;
}
}
}
void AddStuCourse(StuNode* inum)
{
char arrStuCourse_1[5] = {0};//成绩1
char arrStuCourse_2[5] = { 0 };//成绩2
char arrStuCourse_3[5] = { 0 };//成绩3
char arrStuCourse_4[5] = { 0 };//成绩4
char arrStuCourse_5[5] = { 0 };//成绩5
//添加一个成绩的信息
printf("输入成绩1:\n");
scanf("%s", arrStuCourse_1);
printf("输入成绩2:\n");
scanf("%s", arrStuCourse_2);
printf("输入成绩3:\n");
scanf("%s", arrStuCourse_3);
printf("输入成绩4:\n");
scanf("%s", arrStuCourse_4);
printf("输入成绩5:\n");
scanf("%s", arrStuCourse_5);
strcpy(inum->arrStuCourse_1, arrStuCourse_1);
strcpy(inum->arrStuCourse_2, arrStuCourse_2);
strcpy(inum->arrStuCourse_3, arrStuCourse_3);
strcpy(inum->arrStuCourse_4, arrStuCourse_4);
strcpy(inum->arrStuCourse_5, arrStuCourse_5);
}
void ChangeStuByNumToScore(StuNode* LInk)
{
char arrStuCourse_1[5] = { 0 };//成绩1
char arrStuCourse_2[5] = { 0 };//成绩2
char arrStuCourse_3[5] = { 0 };//成绩3
char arrStuCourse_4[5] = { 0 };//成绩4
char arrStuCourse_5[5] = { 0 };//成绩5
printf("请选择 1:通过学号修改,2:通过学生姓名修改\n");
int lookqq = -1;
int inum = -1;
char iscore[20] = { 0 };
scanf("%d", &lookqq);
StuNode* plook = NULL;
switch (lookqq)
{
case 1:
//通过姓名修改
printf("请输入学生学号:\n");
scanf("%s", iscore);
plook = FindStuByNum(iscore);
if (plook != NULL)
{
int flag = 1;
while (flag)
{
printf("请选择修改1.成绩1 2.成绩2 3.成绩3 4.成绩4 5.成绩5 6.退出修改\n");
scanf("%d", &inum);
switch (inum)
{
case 1:
printf("请输入新的成绩1:\n");
scanf("%s", arrStuCourse_1);
strcpy(plook->arrStuCourse_1, arrStuCourse_1);
break;
case 2:
printf("请输入新的成绩2:\n");
scanf("%s", arrStuCourse_2);
strcpy(plook->arrStuCourse_2, arrStuCourse_2);
break;
case 3:
printf("请输入新的成绩3:\n");
scanf("%s", arrStuCourse_3);
strcpy(plook->arrStuCourse_3, arrStuCourse_3);
break;
case 4:
printf("请输入新的成绩4:\n");
scanf("%s", arrStuCourse_4);
strcpy(plook->arrStuCourse_4, arrStuCourse_4);
break;
case 5:
printf("请输入新的成绩5:\n");
scanf("%s", arrStuCourse_5);
strcpy(plook->arrStuCourse_5, arrStuCourse_5);
break;
case 6:
flag = 0;
//打印不调用
system("cls");
printf("*********************学生成绩管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.录入学生成绩 ***\n");
printf("*** 2.查询学生成绩 ***\n");
printf("*** 3.修改学生成绩 ***\n");
printf("*** 4.浏览学生成绩 ***\n");
printf("*** 5.学生成绩排序 ***\n");
printf("*** 0.返回上一级 ***\n");
//打印不调用
break;
default:
printf("请输入正确的指令!\n");
break;
}
}
}
break;
case 2:
//通过姓名修改
printf("请输入学生姓名:\n");
scanf("%s", iscore);
plook = FindStuByName(iscore);
if (plook != NULL)
{
int flag = 1;
while (flag)
{
printf("请选择修改1.成绩1 2.成绩2 3.成绩3 4.成绩4 5.成绩5 6.退出修改\n");
scanf("%d", &inum);
switch (inum)
{
case 1:
printf("请输入新的成绩1:\n");
scanf("%s", arrStuCourse_1);
strcpy(plook->arrStuCourse_1, arrStuCourse_1);
break;
case 2:
printf("请输入新的成绩2:\n");
scanf("%s", arrStuCourse_2);
strcpy(plook->arrStuCourse_2, arrStuCourse_2);
break;
case 3:
printf("请输入新的成绩3:\n");
scanf("%s", arrStuCourse_3);
strcpy(plook->arrStuCourse_3, arrStuCourse_3);
break;
case 4:
printf("请输入新的成绩4:\n");
scanf("%s", arrStuCourse_4);
strcpy(plook->arrStuCourse_4, arrStuCourse_4);
break;
case 5:
printf("请输入新的成绩5:\n");
scanf("%s", arrStuCourse_5);
strcpy(plook->arrStuCourse_5, arrStuCourse_5);
break;
case 6:
flag = 0;
system("cls");
printf("*********************学生成绩管理系统*********************\n");
printf("*********************系统操作指令如下*********************\n");
printf("*** 1.录入学生成绩 ***\n");
printf("*** 2.查询学生成绩 ***\n");
printf("*** 3.修改学生成绩 ***\n");
printf("*** 4.浏览学生成绩 ***\n");
printf("*** 5.学生成绩排序 ***\n");
printf("*** 0.返回上一级 ***\n");
break;
default:
printf("请输入正确的指令!\n");
break;
}
}
}//这是if结尾
break;
default:
break;
}
}//函数结尾
void ShowStuToScore()
{
if (g_pHead == NULL || g_pEnd == NULL)
{
printf("链表为空!\n");
return;
}
StuNode* plook = g_pHead;
while (plook)
{
printf("学号:%8s 姓名:%6s 成绩1:%6s 成绩2:%6s 成绩3:%6s 成绩4:%6s 成绩5:%6s\n", plook->arrStuNum,plook->arrStuName, plook->arrStuCourse_1, plook->arrStuCourse_2, plook->arrStuCourse_3, plook->arrStuCourse_4, plook->arrStuCourse_5);
plook = plook->pNext;
}
}
void PaiXu()
{
if (g_pHead == NULL || g_pEnd == NULL)
{
printf("链表为空,无法排序!\n");
return;
}
//成员赋值
int i = 0;
int icount = 0;
StuNode* plook = (StuNode*)malloc(sizeof(StuNode));
plook = g_pHead;
StuNode* nlook = (StuNode*)malloc(sizeof(StuNode));
nlook = g_pHead;
while (nlook)
{
icount++;
nlook = nlook->pNext;
}
StuCore * temp=(StuCore*)malloc(sizeof(StuCore)*icount);
while (plook)
{
strcpy(temp[i].arrStuCourse_1, plook->arrStuCourse_1);
strcpy(temp[i].arrStuCourse_2, plook->arrStuCourse_2);
strcpy(temp[i].arrStuCourse_3, plook->arrStuCourse_3);
strcpy(temp[i].arrStuCourse_4, plook->arrStuCourse_4);
strcpy(temp[i].arrStuCourse_5, plook->arrStuCourse_5);
strcpy(temp[i].arrStuNum, plook->arrStuNum);
strcpy(temp[i].arrStuName, plook->arrStuName);
i++;
plook = plook->pNext;
}//赋值结束
printf("请选择1:总分排序 2.单科成绩排序\n");
int ichoose = -1, nchoose=-1,j=0,q=0;
scanf("%d", &ichoose);
StuCore t;
switch (ichoose)
{
case 1:
for (j = 0; j < i; j++)
{
temp[j].sum= atoi(temp[j].arrStuCourse_1)+ atoi(temp[j].arrStuCourse_2)+ atoi(temp[j].arrStuCourse_3)+ atoi(temp[j].arrStuCourse_4)+ atoi(temp[j].arrStuCourse_5);
}
for(j=0;j<i;j++)
for (q = 0; q < i - j - 1; q++)
{
if (temp[q].sum < temp[q + 1].sum)
{
t = temp[q];
temp[q] = temp[q + 1];
temp[q + 1] = t;
}
}
for (j = 0; j < i; j++)
printf("学号:%8s 姓名%6s 成绩:%6d\n", temp[j].arrStuNum, temp[j].arrStuName, temp[j].sum);
break;
case 2:
printf("请选择成绩1 2 3 4 5排序\n");
scanf("%d", &nchoose);
switch (nchoose)
{
case 1:
for (j = 0; j < i ; j++)
{
for (q = 0; q < i - j - 1; q++)
{
if (atoi(temp[q].arrStuCourse_1)<atoi(temp[q+1].arrStuCourse_1))
{
t = temp[q];
temp[q] = temp[q + 1];
temp[q + 1] = t;
}
}
}
for (j = 0; j< i; j++)
printf("学号:%8s 姓名%6s 成绩:%6s\n", temp[j].arrStuNum, temp[j].arrStuName, temp[j].arrStuCourse_1);
break;
case 2:
for (j = 0; j < i; j++)
{
for (q = 0; q < i - j - 1; q++)
{
if (atoi(temp[q].arrStuCourse_2) < atoi(temp[q + 1].arrStuCourse_2))
{
t = temp[q];
temp[q] = temp[q + 1];
temp[q + 1] = t;
}
}
}
for (j = 0; j < i; j++)
printf("学号:%8s 姓名%6s 成绩:%6s\n", temp[j].arrStuNum, temp[j].arrStuName, temp[j].arrStuCourse_2);
break;
case 3:
for (j = 0; j < i; j++)
{
for (q = 0; q < i - j - 1; q++)
{
if (atoi(temp[q].arrStuCourse_3) < atoi(temp[q + 1].arrStuCourse_3))
{
t = temp[q];
temp[q] = temp[q + 1];
temp[q + 1] = t;
}
}
}
for (j = 0; j < i; j++)
printf("学号:%8s 姓名%6s 成绩:%6s\n", temp[j].arrStuNum, temp[j].arrStuName, temp[j].arrStuCourse_3);
break;
case 4:
for (j = 0; j < i; j++)
{
for (q = 0; q < i - j - 1; q++)
{
if (atoi(temp[q].arrStuCourse_4) < atoi(temp[q + 1].arrStuCourse_4))
{
t = temp[q];
temp[q] = temp[q + 1];
temp[q + 1] = t;
}
}
}
for (j = 0; j < i; j++)
printf("学号:%8s 姓名%6s 成绩:%6s\n", temp[j].arrStuNum,temp[j].arrStuName, temp[j].arrStuCourse_4);
break;
case 5:
for (j = 0; j < i; j++)
{
for (q = 0; q < i - j - 1; q++)
{
if (atoi(temp[q].arrStuCourse_5) < atoi(temp[q + 1].arrStuCourse_5))
{
t = temp[q];
temp[q] = temp[q + 1];
temp[q + 1] = t;
}
}
}
for (j = 0; j < i; j++)
printf("学号:%8s 姓名:%6s 成绩:%6s\n", temp[j].arrStuNum,temp[j].arrStuName, temp[j].arrStuCourse_5);
break;
default:
printf("请输入正确的指令!\n");
break;
}
break;
default:
printf("请输入正确的指令!\n");
break;
}
}