//以顺序表作为存储结构,设计和实现课程成绩管理的完整程序。程序包括如下功能。
//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] = *s;
}
displayAll(L);
return L;
}
void display(SeqList * L, int i)
{
printf("╭═══════════════════════════════════════════════╮\n");
printf("║\tsno\t\tsname\t\tscore\t║\n");
printf("║\t%s\t\t%s\t\t%-4d\t║\n", L -> data[i].sno, L -> data[i].sname, L -> data[i].score);
printf("╰═══════════════════════════════════════════════╯\n\n");
}
void displayAll(SeqList * L)
{
printf("%d-----\n", L->last);
int i = 0;
printf("╭═══════════════════════════════════════════════╮\n");
printf("║\tsno\t\tsname\t\tscore\t║\n");
for(i = 0; i <= L->last; i++)
{
printf("║\t%s\t\t%s\t\t%-4d\t║\n", L->data[i].sno, L->data[i].sname, L->data[i].score);
}
printf("╰═══════════════════════════════════════════════╯\n\n");
}
int lengthList(SeqList * L)
{
return L -> last + 1;
}
void locateElemByplace(SeqList *L, int i)
{
display(L, i-1);
}
void locateElem(SeqList *L, char ch[5])
{
int i = 0;
for (i = 0; i < L -> last; i ++) {
if (0 == strcmp(L -> data[i].sno, ch)) {
display(L, i);
break;
}
}
}
int insertElem(SeqList *L, int i)
{
int j, k;
DataType * s;
k = L->last;
if (L->last == MAXSIZE - 1)
{
printf("╭═══════════════════════════════╮\n");
printf("║\tOverflow\t║\n");
printf("╰═══════════════════════════════╯\n\n");
return 0;
}
if ((i < 1)||(i > L -> last + 2))
{
printf("╭═══════════════════════════════╮\n");
printf("║\tThe insert place is error\t║\n");
printf("╰═══════════════════════════════╯\n\n");
return 0;
}
for (j = k; j >= i - 1; j --)
{
L -> data[j + 1] = L -> data[j];
}
s =inputdata();
L -> last = L ->last + 1;
L -> data[i - 1] = *s;
return 1;
}
int deleteElem(SeqList *L, int i)
{
int j;
if (i < 1 || i > L -> last + 1)
{
printf("╭═══════════════════════════════╮\n");
printf("║\t不存在第%d个元素\t║\n",i);
printf("╰═══════════════════════════════╯\n\n");
return 0;
}
for (j = i; j <= L -> last; j ++) {
L -> last = L ->last - 1;
}
return 1;
}
void insertSort(SeqList * L)
{
SeqList *L1 = (SeqList *)malloc(sizeof(SeqList));
DataType temp;
int i = 0;
int j = 0;
int len = L->last;
for (i = 0; i <= len; i ++)
{
L1->data[i] = L->data[i];
}
L1->last = L->last;
for (i = 1; i <= len; i ++)
{
if (L1->data[i].score > L1->data[i-1].score)
{
temp.score = L1->data[i].score;
strcpy(temp.sno, L1->data[i].sno);
strcpy(temp.sname, L1->data[i].sname);
L1->data[i] = L1->data[i -1];
for (j = i-2; (temp.score > L1->data[j].score)&&(j >= 0); j--)
{
L1->data[j+1] = L1->data[j];
}
L1->data[j+1].score = temp.score;
strcpy(L1->data[j+1].sno, temp.sno);
strcpy(L1->data[j+1].sname, temp.sname);
}
}
displayAll(L1);
}
int menue()
{
system("clear");
//警告音
printf("\033[0m"); //关闭所有属性
printf("\033[44;37m"); //47是字背景颜色,33是字体的颜色
printf ("\033[5m"); //闪烁
printf("\n^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
printf("\033[0m"); //关闭所有属性
printf("\033[44;37m");
printf("╭═══════════════════════════════╮\n");
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("║<8>成绩排序 ║\n");
printf("║<9>退出 ║\n");
printf("╰═══════════════════════════════╯\n\n");
printf ("\033[5m");
printf("^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
printf("\033[0m"); //关闭所有属性
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
//printf ( "\t\007%s", asctime (timeinfo) );
printf ("\033[;34m");
printf ("\t[%4d-%02d-%02d %02d:%02d:%02d]\n",
1900+timeinfo->tm_year,
1+timeinfo->tm_mon,
timeinfo->tm_mday,
timeinfo->tm_hour,
timeinfo->tm_min,
timeinfo->tm_sec);
char colorname[3][20] = {{"RED"}, {"BLUE"}, {"YELLLOW"}};
srand(time(&rawtime)); //时间触发
//textcolor(colorname[rand()%3]);
//printf("\t[textcolor is %s]\n", colorname[rand()%3]);
//颜色码和控制码 我的参考链接 http://wenku.baidu.com/view/a38f77ff910ef12d2af9e70b.html
printf("\t◎输入功能项:");
int a = 0;
scanf("%d",&a);
printf("\033[0m");
system("clear");
return a;
}
C语言学生信息管理系统 (单链表版)【无图,未调试】
最新推荐文章于 2023-07-06 15:48:52 发布