📄 sqlist(hard).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 *fScore;
float fTotal;
};
typedef struct student ElemType;
struct sqlist{
ElemType *elem;
int length;
};
struct course
{
char **name;
int cnum;
}; //待用
typedef struct course Course;
Course course;
struct statistic{
int iA;
int iB;
int iC;
int iD;
int iE;
};
typedef struct statistic Level;
typedef int status;
status Init(sqlist &sl)
{
sl.elem = NULL;
sl.elem = new ElemType[MAXSIZE+1];
sl.length = 0;
if(!sl.elem) return 0;
else return 1;
}
void Destroy(sqlist &sl)
{
if(sl.elem)
delete []sl.elem;
sl.elem = NULL;
}
status Creat(sqlist &sl)
{
if(!sl.elem) return 0;
printf("输入表的长度:");
scanf("%d",&sl.length);
if(sl.length > MAXSIZE)
{
printf("表需要空间太大,发生溢出!");
return 0;
}
for(int i=1;i<sl.length+1; i++)
{
sl.elem[i].fScore = new float[course.cnum];
printf("输入学号,名字和各课程成绩(输入提示:数据之间加空格):\n");
printf("课程包括:");
for(int j=1;j<=course.cnum;j++)
printf("%s ",course.name[i]);
printf("\n");
scanf("%s%s",sl.elem[i].sNo,sl.elem[i].sName);
for(j=1;j<=course.cnum;j++)
scanf("%f",&sl.elem[i].fScore[j]);
sl.elem[i].fTotal = 0;
}
return 1;
}
status OutPut(sqlist sl)
{
if(!sl.length)
{
printf("表为空!");
return 0;
}
printf("表包含%d个记录:\n",sl.length);
printf("\n学号\t姓名");
for(int i=1;i<=course.cnum;i++)
printf("\t%s",course.name[i]);
printf("\n");
for(i=1;i<sl.length+1;i++)
{
printf("%s\t%s\t",sl.elem[i].sNo,sl.elem[i].sName);
for(int j=1;j<=course.cnum;j++)
printf("%.2f\t",sl.elem[i].fScore[i]);
printf("\n");
}
return 1;
}
status Insert(sqlist &sl,int iPos,ElemType elem)
{
if(sl.length == MAXSIZE)
{
printf("表满,不能插入");
return 0;
}
if(iPos >sl.length+1)
{
printf("插入位置不正确!");
return 0;
}
if(iPos == sl.length+1 )
{
sl.elem[sl.length+1] = elem;
sl.length++;
return 1;
}
for(int i=sl.length;i>=iPos;i--)
{
sl.elem[i+1] = sl.elem[i];
}
sl.elem[iPos] = elem;
sl.length++;
return 1;
}
status Delete(sqlist &sl,int iPos,ElemType &elem)
{
if(!sl.length)
{
printf("表空,不能删除");
return 0;
}
if(iPos > sl.length)
{
printf("删除位置不正确!");
return 0;
}
if(iPos == sl.length)
{
elem = sl.elem[sl.length];
sl.length--;
return 1;
}
elem = sl.elem[iPos];
for(int i=iPos+1;i<=sl.length;i++)
{
sl.elem[i-1] = sl.elem[i];
}
sl.length--;
return 1;
}
status Find(sqlist sl,char *no)
{
for(int i=1;i<=sl.length;i++)
if(strcmp(sl.elem[i].sNo,no)==0)
{
printf("找到的学生成绩信息\n%s\t%s\t",sl.elem[i].sNo,sl.elem[i].sName);
for(int j=1;j<=course.cnum;j++)
printf("%.2f",sl.elem[i].fScore[i]);
printf("\n");
return 1;
}
if(i>sl.length)
{
printf("没有该记录!");
return 0;
}
}
void GetLevel(sqlist sl,int flag,Level &lev)
{
int i;
for(i=1;i<=sl.length;i++)
{
if(sl.elem[i].fScore[flag] >=90)
lev.iA++;
else if(sl.elem[i].fScore[flag]>=80)
lev.iA++;
else if(sl.elem[i].fScore[flag]>=70)
lev.iC++;
else if(sl.elem[i].fScore[flag]>=60)
lev.iD++;
else
lev.iE++;
}
}
void SetTotalScore(sqlist &sl)
{
for(int i=1;i<=sl.length; i++)
for(int j=1;j<=course.cnum;j++)
sl.elem[i].fTotal += sl.elem[i].fScore[j];
}
main()
{
char ch;
int flag,i,j;
sqlist sl;
int iPos;
ElemType elem;
char *name = new char[10];
Level lev;
printf("/******学生成绩管理系统*****/\n");
printf("\n/******本系统基本操作如下:\n/******0:退出\n/******1:初始化\n");
printf("/******2:课程门数和课程名称\n");
printf("/******3:创建新表\n/******4:输出\n");
printf("/******5:增加新学生\n/******6:删除学生\n/****7:按学号查询\n/****8:总分\n");
printf("请输入操作提示:(0~7)");
while(1)
{
ch = getchar();
switch(ch)
{
case '0':
Destroy(sl);
delete []name;
exit(1);
break;
case '1':
flag = Init(sl);
if(flag) printf("初始化成功!");
else printf("初始化失败!");
break;
case '2':
printf("\n输入课程数和课程名称:\n");
scanf("%d",&course.cnum);
course.name = new char*[course.cnum+1];
for(i=1;i<=course.cnum;i++)
{
scanf("%s",course.name[i]);
}
case '3':
flag = Creat(sl);
if(flag) printf("创建成功!");
else printf("创建失败!");
break;
case '4':
OutPut(sl);
break;
case '5':
printf("输入插入位置:");
scanf("%d",&iPos);
printf("输入插入元素:学号 姓名 各门课成绩");
scanf("%s%s",sl.elem[i].sNo,sl.elem[i].sName);
for(j=1;j<=course.cnum;j++)
scanf("%f",&sl.elem[i].fScore[j]);
sl.elem[i].fTotal = 0;
flag = Insert(sl,iPos,elem);
if(flag) printf("插入成功!");
else printf("插入失败!");
break;
case '6':
printf("输入删除位置:");
scanf("%d",&iPos);
flag = Delete(sl,iPos,elem);
if(flag) printf("删除成功!");
else printf("删除失败!");
break;
case '7':
printf("输入学号:");
scanf("%s",name);
flag = Find(sl,name);
break;
case '8':
printf("确定要计算总成绩?");
scanf("%d",&flag);
if(flag)
SetTotalScore(sl);
break;
case '9':
printf("输入统计的课程:");
scanf("%s",i);
GetLevel(sl,i,lev);
printf("\n>90\t80~90\t70~80\t60~70\t<60\t\n");
printf("\n%d\t%d\t%d\t%d\t%d\n",lev.iA,lev.iB,lev.iC,lev.iD,lev.iE);
break;
case 'a':
default:
continue;
}
printf("请输入操作提示:(0~7)");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -