📄 stulinklist.cpp
字号:
// sqlist.cpp : 定义控制台应用程序的入口点。
//
//#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "process.h"
#define MAXSIZE 100
struct student{
char sNo[10];
char sName[10];
float fScore1;
float fScore2;
float fScore3;
float fTotal;
};
struct statistic{
int iA;
int iB;
int iC;
int iD;
int iE;
};
typedef struct student ElemType;
typedef struct statistic Level;
typedef int status;
struct LNode{
ElemType elem;
LNode *pnext;
};
typedef struct LNode LNode,*LinkList;
status Init(LinkList &sl)
{
sl = new LNode;
sl->pnext = NULL;
if(!sl) return 0;
else return 1;
}
void Destroy(LinkList &sl)
{
LNode *pa = sl->pnext,*pb;
while(pa)
{
pb = pa->pnext;
delete pa;
pa = pb;
}
}
status Creat(LinkList &sl)
{
int length; //表的长度
ElemType elem;
LNode *pnew;
if(!sl) return 0;
printf("\n\n输入表的长度:");
scanf("%d",&length);
for(int i=1;i<= length; i++)
{
printf("输入学号 名字 成绩1 成绩2 成绩3\n");
scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,
&elem.fScore2,&elem.fScore3);
pnew = new LNode; //生成新结点
pnew->elem = elem;
pnew->pnext = NULL;
pnew->pnext = sl->pnext; //插入结点
sl->pnext = pnew;
}
return 1;
}
status OutPut(LinkList sl)
{
LNode* pnew;
if(!sl->pnext)
{
printf("\n\n表为空!");
return 0;
}
// printf("表如下(包含%d个记录):",Getlength(sl));
printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\n ");
for(pnew = sl->pnext; pnew; pnew = pnew->pnext)
{
printf("\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnew->elem.sNo,pnew->elem.sName,
pnew->elem.fScore1,pnew->elem.fScore2,pnew->elem.fScore3);
}
return 1;
}
status Insert(LinkList sl,int iPos,ElemType elem)
{
LNode* pnode = sl;
LNode* pnew;
for(int i=0;i<iPos-1 && pnode;i++)
{
pnode = pnode->pnext;
}
if(!pnode || i>iPos-1)
{
printf("插入位置不正确!");
return 0;
}
pnew = new LNode;
pnew->elem = elem;
pnew->pnext = NULL;
pnew->pnext = pnode->pnext;
pnode->pnext=pnew;
return 1;
}
int GetLength(LinkList sl)
{
LNode* pnode;
int length=0;
for(pnode = sl->pnext; pnode; pnode=pnode->pnext)
length++;
return length;
}
status Delete(LinkList sl,int iPos,ElemType &elem)
{
int length;
LNode* pnode;
int i;
if(!sl->pnext)
{
printf("\n\n表空,不能删除");
return 0;
}
length = GetLength(sl);
if(iPos > length || iPos < 1)
{
printf("\n\n删除位置不正确!");
return 0;
}
for(i=0,pnode=sl; i<iPos-1 && pnode; i++,pnode=pnode->pnext);
if(pnode && pnode->pnext)
{
LNode* ptemp = pnode->pnext;
pnode->pnext = ptemp->pnext;
delete ptemp;
return 1;
}
}
status FindStuNo(LinkList sl,char *sno)
{
LNode* pnode=sl->pnext;
for(;pnode;pnode = pnode->pnext)
if(strcmp(pnode->elem.sNo,sno)==0)
{
printf("\n\n找到的学生信息\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnode->elem.sNo,
pnode->elem.sName,pnode->elem.fScore1,pnode->elem.fScore2,
pnode->elem.fScore3);
return 1;
}
if(!pnode)
{
printf("\n\n没有该记录!");
return 0;
}
}
status FindStuName(LinkList sl,char *sname)
{
int flag=0;
LNode* pnode;
for(pnode=sl->pnext; pnode; pnode=pnode->pnext)
{
if(strcmp(pnode->elem.sName,sname)==0)
{
if(flag == 0)
{
printf("\n\n找到的学生信息\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnode->elem.sNo,
pnode->elem.sName,pnode->elem.fScore1,pnode->elem.fScore2,
pnode->elem.fScore3);
flag=1;
}
else
printf("\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnode->elem.sNo,
pnode->elem.sName,pnode->elem.fScore1,pnode->elem.fScore2,
pnode->elem.fScore3);
}
}
if(pnode)
{
printf("\n\n没有该记录!");
return 0;
}
else return 1;
}
main()
{
char ch;
int flag;
LinkList sl = NULL;
int iPos;
ElemType elem;
char *sname = new char[10];
char *sno = new char[10];
printf("/******学生成绩管理系统*****/\n");
printf("\n\t本系统基本操作如下\n\n\t0:退出\n\t1:初始化\n\t2:创建\n\t3:输出\n");
printf("\t4:插入\n\t5:删除\n\t6:按学号查找\n\t7:按姓名输出\n");
printf("\n请输入操作提示:(0~6)\n");
while(1)
{
ch = getchar();
switch(ch)
{
case '0':break;
case '1':
flag = Init(sl);
if(flag) printf("初始化成功!");
else printf("初始化失败!");
break;
case '2':
flag = Creat(sl);
if(flag) printf("创建成功!");
else printf("创建失败!");
break;
case '3':
OutPut(sl);
break;
case '4':
printf("\n输入插入位置:\n");
scanf("%d",&iPos);
printf("\n输入插入元素:学号 姓名 成绩1 成绩2 成绩3\n");
scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,&elem.fScore2,&elem.fScore3);
flag = Insert(sl,iPos,elem);
if(flag) printf("\n插入成功!\n");
else printf("\n插入失败!\n");
break;
case '5':
printf("\n输入删除位置:\n");
scanf("%d",&iPos);
flag = Delete(sl,iPos,elem);
if(flag) printf("\n删除成功!\n");
else printf("\n删除失败!\n");
break;
case '6':
printf("\n输入学号:\n");
scanf("%s",sno);
flag = FindStuName(sl,sno);
break;
case '7':
printf("\n输入学生姓名:\n");
scanf("%s",sname);
flag = FindStuName(sl,sname);
break;
default:
continue;
}
printf("\n请输入操作提示:(0~7)\n");
if(ch == '0')
{
Destroy(sl);
exit(1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -