您的位置:首页 > 编程语言 > C语言/C++

C语言学生信息管理系统 (单链表版)【无图,未调试】

2013-10-28 16:44 691 查看
//以顺序表作为存储结构,设计和实现课程成绩管理的完整程序。程序包括如下功能。
//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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: