#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//////////////////////////////////////////////////////////////////////////
struct _STUINFO
{
char iID[20];
char sName[50];
int iScore[3];
int iAvg;
};
#define DATATYPE _STUINFO
typedef struct _NODE
{
DATATYPE _data;
struct _NODE *pNext;
}_SLNODE;
char* pOutInfo[]=
{
"欢迎使用学生成绩管理系统 v1.0\n",
"请选择您的操作:\n【1】输入新记录\n【2】显示记录\n【3】查找\n【4】排序输出\n【5】插入新记录\n【6】删除记录\n【7】保存文件\n【0】退出系统\n",
"您输入的功能有误,请查询后再输入!\n",
"请输入 学号,姓名,分数1,分数2,分数3:\n",
"操作完成!请继续使用!\n"
};
//////////////////////////////////////////////////////////////////////////
void SL_init(_SLNODE** head);
void SL_getItem(_SLNODE* head,int i,DATATYPE* data);
int SL_getLength(_SLNODE* head);
void SL_insert(_SLNODE* head,int i,DATATYPE data);
void SL_delete(_SLNODE* head,int i,DATATYPE* data);
void SL_destroy(_SLNODE** head);
void InputRecord();
void DisPlay(_STUINFO stuInfo);
void LookAllRecord();
void FindRecord();
void InsertRecord();
void DeleteRecord();
void SortDisplay();
void SaveRecord();
//////////////////////////////////////////////////////////////////////////
//global define
_SLNODE* head;
char* sFilePath="c:\\score.dat";
//////////////////////////////////////////////////////////////////////////
void main()
{
int iOpCode=-1;
printf(pOutInfo[0]);
printf(pOutInfo[1]);
SL_init(&head);
do
{
scanf("%d",&iOpCode);
switch(iOpCode)
{
case 1:
InputRecord();
break;
case 2:
LookAllRecord();
break;
case 3:
FindRecord();
break;
case 4:
SortDisplay();
break;
case 5:
InsertRecord();
break;
case 6:
DeleteRecord();
break;
case 7:
SaveRecord();
break;
default:
printf(pOutInfo[2]);
printf(pOutInfo[1]);
break;
}
printf(pOutInfo[4]);
printf(pOutInfo[1]);
} while(iOpCode!=0);
SL_destroy(&head);
}
void DisPlay(_STUINFO stuInfo)
{
printf("学号:%s ",stuInfo.iID);
printf("姓名:%s ",stuInfo.sName);
printf("成绩1:%d ",stuInfo.iScore[0]);
printf("成绩2:%d ",stuInfo.iScore[1]);
printf("成绩3:%d ",stuInfo.iScore[2]);
printf("平均成绩:%d ",stuInfo.iAvg);
}
void InputRecord()
{
printf("输入一条新记录:\n");
_STUINFO stuInfo;
printf(pOutInfo[3]);
scanf("%s %s %d %d %d",&stuInfo.iID,&stuInfo.sName,&stuInfo.iScore[0],&stuInfo.iScore[1],&stuInfo.iScore[2]);
stuInfo.iAvg=(stuInfo.iScore[0]+stuInfo.iScore[1]+stuInfo.iScore[2])/3;
printf("%d",stuInfo.iAvg);
SL_insert(head,SL_getLength(head),stuInfo);
}
void LookAllRecord()
{
int iTal=0;
iTal=SL_getLength(head);
for (int i=0;i<iTal;i++)
{
_STUINFO stu;
SL_getItem(head,i,&stu);
printf("当前第%d条记录内容[共%d条记录]:\n",i,SL_getLength(head));
DisPlay(stu);
printf("\n");
}
}
void FindRecord()
{
printf("请输入您要查找的学生姓名:\n");
bool bFind=false;
char sName[50];
scanf("%s",&sName);
for (int i=0;i<SL_getLength(head);i++)
{
_STUINFO stuInfo;
SL_getItem(head,i,&stuInfo);
if (!strcmp(sName,stuInfo.sName))
{
DisPlay(stuInfo);
bFind=true;
printf("\n");
break;
}
}
if (!bFind)
{
printf("您查找的数据不存在!\n");
}
}
void InsertRecord()
{
_STUINFO stuInfo;
int iPos=0;
printf("请输入您要插入数据的位置[当前记录数:%d]:\n",SL_getLength(head));
scanf("%d",&iPos);
if (iPos<0 || iPos>SL_getLength(head))
{
printf("位置错误,插入失败!");
return;
}
printf(pOutInfo[3]);
scanf("%s %s %d %d %d",&stuInfo.iID,&stuInfo.sName,&stuInfo.iScore[0],&stuInfo.iScore[1],&stuInfo.iScore[2]);
stuInfo.iAvg=(float)((stuInfo.iScore[0]+stuInfo.iScore[1]+stuInfo.iScore[2])/3.0);
SL_insert(head,iPos,stuInfo);
}
void DeleteRecord()
{
int iPos=0;
_STUINFO stuInfo;
printf("请输入您要删除记录的位置[当前共有%d条记录]\n",SL_getLength(head));
scanf("%d",&iPos);
if (iPos<0 || iPos>SL_getLength(head))
{
return;
}
SL_delete(head,iPos,&stuInfo);
printf("您删除的数据记录是:\n");
DisPlay(stuInfo);
printf("\n");
}
void SortDisplay()
{
_SLNODE *sort;
_STUINFO stuInfo,stuTemInfo,stuInfo1,stuInfo2,stuRslt;
SL_init(&sort);
for (int i=0;i<SL_getLength(head);i++)
{
SL_getItem(head,i,&stuInfo);
SL_insert(sort,i,stuInfo);
}
for (int m=0;m<SL_getLength(sort);m++)
{
SL_getItem(sort,m,&stuInfo1);
for (int n=m;n<SL_getLength(sort);n++)
{
SL_getItem(sort,n,&stuInfo2);
if (stuInfo1.iAvg>stuInfo2.iAvg)
{
stuTemInfo=stuInfo1;
stuInfo1=stuInfo2;
stuInfo2=stuTemInfo;
SL_delete(sort,m,&stuRslt);
SL_insert(sort,m,stuInfo1);
SL_delete(sort,n,&stuRslt);
SL_insert(sort,n,stuInfo2);
}
}
}
for (int x=0;x<SL_getLength(sort);x++)
{
SL_getItem(sort,x,&stuRslt);
DisPlay(stuRslt);
printf("\n");
}
SL_destroy(&sort);
}
void SaveRecord()
{
printf("文件保存的默认路径为%s\n",sFilePath);
FILE *f;
_STUINFO stuInfo;
f=fopen(sFilePath,"wt");
for (int i=0;i<SL_getLength(head);i++)
{
SL_getItem(head,i,&stuInfo);
fwrite(stuInfo.iID,1,20,f);
fwrite(stuInfo.sName,1,50,f);
fwrite(&stuInfo.iScore[0],1,sizeof(int),f);
fwrite(&stuInfo.iScore[1],1,sizeof(int),f);
fwrite(&stuInfo.iScore[2],1,sizeof(int),f);
fwrite(&stuInfo.iAvg,1,sizeof(int),f);
}
fclose(f);
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//动态链表
void SL_init(_SLNODE** head)
{
if ((*head=(_SLNODE*)malloc(sizeof(_SLNODE)))==NULL)
{
exit(0);
}
(*head)->pNext=NULL;
}
int SL_getLength(_SLNODE* head)
{
_SLNODE *p=head;
int iSize=0;
while (p->pNext!=NULL)
{
p=p->pNext;
iSize++;
}
return iSize;
}
void SL_insert(_SLNODE* head,int i,DATATYPE data)
{
_SLNODE *p,*q;
int j;
p=head;
j=-1;
while (p->pNext!=NULL && j<i-1)
{
p=p->pNext;
j++;
}
if (j!=i-1)
{
printf("链表出错!\n");
return;
}
if ((q=(_SLNODE*)malloc(sizeof(_SLNODE)))==NULL)
{
exit(0);
}
q->_data=data;
q->pNext=p->pNext;
p->pNext=q;
}
void SL_delete(_SLNODE* head,int i,DATATYPE* data)
{
_SLNODE *p,*s;
int j;
p=head;
j=-1;
while (p->pNext!=NULL && p->pNext->pNext!=NULL && j<i-1)
{
p=p->pNext;
j++;
}
if (j!=i-1)
{
printf("链表出错!\n");
return;
}
s=p->pNext;
*data=s->_data;
p->pNext=p->pNext->pNext;
}
void SL_getItem(_SLNODE* head,int i,DATATYPE* data)
{
_SLNODE *p;
int j;
p=head;
j=-1;
while (p->pNext!=NULL && j<i)
{
p=p->pNext;
j++;
}
if (j!=i)
{
printf("链表错误!\n");
return;
}
*data=p->_data;
}
void SL_destroy(_SLNODE** head)
{
_SLNODE *p,*q;
p=*head;
while (p!=NULL)
{
q=p;
p=p->pNext;
free(q);
}
*head=NULL;
}
没有合适的资源?快使用搜索试试~ 我知道了~
CP.rar_4 3 2 1
共1个文件
cpp:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 77 浏览量
2022-09-14
17:43:46
上传
评论
收藏 2KB RAR 举报
温馨提示
char* pOutInfo[]= { "欢迎使用学生成绩管理系统 v1.0\n", "请选择您的操作:\n【1】输入新记录\n【2】显示记录\n【3】查找\n【4】排序输出\n【5】插入新记录\n【6】删除记录\n【7】保存文件\n【0】退出系统\n", "您输入的功能有误,请查询后再输入!\n", "请输入 学号,姓名,分数1,分数2,分数3:\n", "操作完成!请继续使用!\n" }
资源推荐
资源详情
资源评论
收起资源包目录
CP.rar (1个子文件)
CP.cpp 7KB
共 1 条
- 1
资源评论
刘良运
- 粉丝: 77
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功