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; }
相关文章推荐
- 【C语言知识点】菜鸟程序媛的杂记总结1~10
- CERT C/C++ Secure Coding Standard
- 七、对话框的创建、设置以及布局
- VC++操作word
- c++调试问题
- 【转】C++中new动态定义一维数组,二维数组,三维数组
- C++ main()函数及其参数
- VC++ 静态DLL模板-导出类
- 使用C/C++实现对字符串的反转(递归和非递归)
- 『C/C++』C++中的继承和组合区别使用
- 『C/C++』多态性 polymorphism
- 关于c++ 中while(cin>>temp)相关问题搜集的一些知识
- C语言atol用法
- LeetCode Merge K Sorted Lists 问题和解答程序 C++ priority queue实现方法
- C++版贪吃蛇游戏
- iOS开发基础——C/C++数据类型介绍
- bcb平台的C++dll的静态调用法和动态调用法的方法
- c++ 数组,变量,指针,引用, 初始化,赋值
- 2013C++第10周项目——循环结构程序设计
- C++ 读入一个整数,将各个数位上的数拆分下来并输出(从高位到低位)。