//以顺序表作为存储结构,设计和实现课程成绩管理的完整程序。程序包括如下功能。
//1.建立学生成绩表,包含学生的学号、姓名和成绩。
//2.可以显示所有学生成绩。
//3.可以计算学生的总数。
//4.可以按学号和序号查找学生。
//5.可以在指定位置插入学生成绩数据。
//6.可以删除指定位置的学生数据。
//7.可以把学生成绩按从高到低的顺序排序。
//作者: yinlinqvan
//操作系统:Mac OS X
//编译器:gcc
#include "string.h"
#include "sys/malloc.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "sys/types.h"
#define MAXSIZE 100
typedef struct Student
{
char sname[9];
char sno[5];
int score;
}DataType;
typedef struct
{
DataType data[MAXSIZE];
int last;
}SeqList;
//全民目击
DataType *inputdata(void);
SeqList *initSeq(void);
void display(SeqList * L, int i);
void displayAll(SeqList * L);
int lengthList(SeqList * L);
void locateElemByplace(SeqList *L, int i);
void locateElem(SeqList *L, char ch[5]);
int insertElem(SeqList *L, int i);
int deleteElem(SeqList *L, int i);
void insertSort(SeqList * L);
int menue();
int main(int argc,char *argv[])
{
SeqList * L;
char sno[5] = {'\0'};
char sname[9] = {'\0'};
int b = 1;
int i = 0;
int t = 0;
while (b) {
switch(menue())
{
case 1:
L = initSeq();
break;
case 2:
printf("\t◎输入插入哪个位置前:");
scanf("%d", &i);
insertElem(L, i);
break;
case 3:
printf("\t◎输入待删除学生的序号:");
scanf("%d", &i);
deleteElem(L, i);
break;
case 4:
printf(" \n");
printf(" \t学生总数为:%d\t\t \n", lengthList(L));
printf(" \n\n");
break;
case 5:
printf("\t◎输入待查找学生的学号:");
scanf("%s", sno);
locateElem(L, sno);
break;
case 6:
printf("\t◎输入待查学生的位置:");
scanf("%d", &i);
locateElemByplace(L, i);
break;
case 7:
displayAll(L);
break;
case 8:
insertSort(L);
break;
case 9:
i = 2;
while (i)
{
system("clear");
printf("\033[5m");
printf("\033[ 25l"); //隐藏光标
printf("\n\n\n\n\n\n");
printf(" \n");
printf(" \t正在退出(%d秒)\t\t \n", i--);
printf(" \n");
sleep(1);
}
printf("\033[0m");
system("clear");
return 0;
break;
default:
i = 2;
while (i)
{
system("clear");
printf(" \n");
printf(" 操作数无效,正在返回主菜单(%d秒) \n", i--);
printf(" \n");
sleep(1);
}
continue;
}
getchar();
printf("PRESS ENTER TO CONTINUE!");
while (1) {
if ('\n' == getchar())
{
break;
}
}
}
return 0;
}
DataType *inputdata(void)
{
DataType s1;
DataType *s = &s1;
char sno[5] = {'\0'};
char sname[9] = {'\0'};
int score = 0;
printf("\tsno\t->");
scanf("%s",sno);
if (sno[0] == '#') {
return NULL;
}
strcpy(s->sno, sno);
printf("\tsname\t->");
scanf("%s",s->sname);
printf("\tscore\t->");
scanf("%d", &s->score);
puts("");
return s;
}
SeqList *initSeq(void)
{
DataType * s;
SeqList L1;
SeqList * L = &L1;
L->last = -1;
printf(" \n");
printf(" 请输入学生信息(当学号为\"#\"时结束) \n");
printf(" \n");
printf(" 学号sno (不超过4位) \n");
printf(" 姓名sname (不超过4个汉字) \n");
printf(" 成绩score (int型) \n");
printf(" \n\n");
while (1) {
s = inputdata();
if (!s)
{
break;
}
L->last = L->last + 1;
L->data[L->last