本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下
代码:
//以单链表作为存储结构,设计和实现课程成绩管理的完整程序。//程序包括如下功能。 //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;
struct Node *next;
}
LinkList;
LinkList * inputdata();
void display(LinkList * p);
//遍历链表 void displayAll(LinkList * L);
//插入 LinkList * createTailList();
//尾插 LinkList * createHeadList();
//头插 //查询 void getElem(LinkList * L, int i);
//按序号 void locateElemBysno(LinkList * L, char ch[]);
//按值 void locateElemBysname(LinkList * L, char ch[]);
int lengthList(LinkList * L);
//插入 void insertElem(LinkList * L, int i);
//在第i个结点前进行插入 void insertElemBysno(LinkList * L, char ch[5]);
//按学号 void deleteElem(LinkList * L, char ch[]);
//排序 void insertSort(LinkList * L);
int menue();
int main(int argc,char *argv[]) {
LinkList *L;
char sno[5] = {
' '}
;
char sname[9] = {
' '}
;
int b = 1;
int i = 1;
while (b) {
switch(menue()) {
case 1: L = createTailList();
//L = createHeadList();
break;
case 2: //displayAll(L);
printf("t◎输入插入哪个位置前:");
scanf("%d", &i);
insertElem(L, i);
//scanf("%s", sno);
//insertElemBysno(L, sno);
break;
case 3: printf("t◎输入待删除学生的学号:");
scanf("%s", sno);
deleteElem(L, sno);
break;
case 4: printf("╭═══════════════════════════════╮n");
printf("║t学生总数为:%dtt║n", lengthList(L));
printf("╰═══════════════════════════════╯nn");
break;
case 5: printf("t◎输入待查找学生的学号:");
scanf("%s", sno);
locateElemBysno(L, sno);
break;
case 6: printf("t◎输入待查学生的位置:");
scanf("%d", &i);
getElem(L, i);
break;
case 7: displayAll(L);
break;
case 8: insertSort(L);
break;
case 9: i = 2;
while (i) {
system("clear");
printf(" 33[5m");
printf(" 33[?25l");
//隐藏光标 printf("nnnnnn");
printf("╭═══════════════════════════════╮n");
printf("║t正在退出(%d秒)tt║n", i--);
printf("╰═══════════════════════════════╯n");
sleep(1);
}
printf(" 33[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;
}
int menue() {
system("clear");
//警告音 printf(" 33[0m");
//关闭所有属性 printf(" 33[44;
37m");
//47是字背景颜色,33是字体的颜色 printf (" 33[5m");
//闪烁 printf("n^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^nn");
printf(" 33[0m");
//关闭所有属性 printf(" 33[44;
37m");
printf("╭═══════════════════════════════╮n");
printf("║t学生成绩管理程序t║n");
printf("║tttt║n");
printf("║t<1>创建ttt║n");
printf("║t<2>指定位置后插入t║n");
printf("║t<3>按位置删除tt║n");
printf("║t<4>求学生总数tt║n");
printf("║t<5>按学号查找tt║n");
printf("║t<6>按位置查找tt║n");
printf("║t<7>显示所有学生tt║n");
printf("║t<8>成绩排序tt║n");
printf("║t<9>退出ttt║n");
printf("╰═══════════════════════════════╯nn");
printf (" 33[5m");
printf("^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^nn");
printf(" 33[0m");
//关闭所有属性 time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
//printf ( "t 07%s", asctime (timeinfo) );
printf (" 33[;
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(" 33[0m");
system("clear");
return a;
}
LinkList * inputdata() {
LinkList *s = NULL;
char sno[5] = {
' '}
;
char sname[9] = {
' '}
;
int score = 0;
printf("tsnot->");
scanf("%s", sno);
if (sno[0] == '#') {
return s;
}
s = (LinkList *)malloc(sizeof(LinkList));
strcpy(s -> data.sno, sno);
printf("tsnamet->");
scanf("%s", sname);
strcpy(s -> data.sname, sname);
printf("tscoret->");
scanf("%d", &score);
s -> data.score = score;
printf("n");
return s;
}
void display(LinkList * p) {
printf("╭═══════════════════════════════════════════════╮n");
printf("║tsnottsnamettscoret║n");
printf("║t%stt%stt%-4dt║n", p->data.sno, p->data.sname, p->data.score);
printf("╰═══════════════════════════════════════════════╯nn");
}
void displayAll(LinkList * L) {
printf("╭═══════════════════════════════════════════════╮n");
printf("║tsnottsnamettscoret║n");
LinkList * p = L -> next;
while(p) {
printf("║t%stt%stt%-4dt║n", p->data.sno, p->data.sname, p->data.score);
p = p -> next;
}
printf("╰═══════════════════════════════════════════════╯nn");
}
LinkList * createTailList() {
//链表头结点 LinkList * L = (LinkList *)malloc(sizeof(LinkList));
//结点 LinkList * s = NULL;
//尾结点 LinkList * r = L;
printf("╭═══════════════════════════════════════════════╮n");
printf("║tt尾插法建立ttt║n");
printf("║t请输入学生信息(当学号为"#"时结束)t║n");
printf("║tttttt║n");
printf("║t学号sno (不超过4位)tt║n");
printf("║t姓名sname (不超过4个汉字)tt║n");
printf("║t成绩score (int型)ttt║n");
printf("╰═══════════════════════════════════════════════╯nn");
while (1) {
s = inputdata();
if (!s) {
break;
}
r->next = s;
r = s;
}
r->next = NULL;
return L;
}
LinkList * createHeadList() {
//链表头结点 LinkList * L = (LinkList *)malloc(sizeof(LinkList));
//结点 LinkList * s = NULL;
printf("╭═══════════════════════════════════════════════╮n");
printf("║tt头插法建立tt║n");
printf("║t请输入学生信息(当学号为"#"时结束)t║n");
printf("║tttttt║n");
printf("║t学号sno (不超过4位)tt║n");
printf("║t姓名sname (不超过4个汉字)tt║n");
printf("║t成绩score (int型)ttt║n");
printf("╰═══════════════════════════════════════════════╯nn");
while (1) {
s = inputdata();
if (!s) {
break;
}
s->next = L->next;
L->next = s;
}
return L;
}
void getElem(LinkList * L, int i) {
LinkList * p = L;
int j = 0;
while (p && j<i) {
p = p->next;
j++;
}
if (!p) {
printf("╭═══════════════════════════════╮n");
printf("║tDon't find the student!t║n");
printf("╰═══════════════════════════════╯nn");
}
else {
display(p);
}
}
void locateElemBysno(LinkList * L, char ch[5]) {
LinkList * p = L->next;
while (p && (0 != strcmp(p->data.sno, ch))) {
p = p -> next;
}
if (!p) {
printf("╭═══════════════════════════════╮n");
printf("║tDon't find the student!t║n");
printf("╰═══════════════════════════════╯nn");
}
else {
display(p);
}
}
void locateElemBysname(LinkList * L, char ch[9]) {
LinkList * p = L->next;
while (p && (0 != strcmp(p->data.sname, ch))) {
p = p -> next;
}
if (!p) {
printf("╭═══════════════════════════════╮n");
printf("║tDon't find the student!t║n");
printf("╰═══════════════════════════════╯nn");
}
else {
display(p);
}
}
int lengthList(LinkList * L) {
LinkList * p = L->next;
int j = 0;
while (p) {
p = p->next;
j ++;
}
return j;
}
void insertElem(LinkList * L, int i) {
LinkList * s = inputdata();
LinkList * p = L;
int j = 0;
while (p && j<i-1) {
p = p->next;
j++;
}
if (p && p->next) {
s->next = p->next;
p->next = s;
}
else {
printf("╭═══════════════════════════════╮n");
printf("║tDon't find the student!t║n");
printf("╰═══════════════════════════════╯nn");
}
displayAll(L);
}
void insertElemBysno(LinkList * L, char ch[5]) {
LinkList * p = L;
LinkList * s = NULL;
while (p && (0 != strcmp(p->data.sno, ch))) {
p = p->next;
}
if (!p) {
printf("╭═══════════════════════════════╮n");
printf("║tDon't find the student!t║n");
printf("╰═══════════════════════════════╯nn");
}
else {
s = inputdata();
s->next = p->next;
p->next = s;
}
}
void deleteElem(LinkList * L, char ch[5]) {
LinkList *p, *q;
p = L->next;
q=L;
while (p && (strcmp(p->data.sno, ch) != 0)) {
q = p;
p = p->next;
}
if (!p) {
printf("╭═══════════════════════════════╮n");
printf("║tDon't find the student!t║n");
printf("╰═══════════════════════════════╯nn");
}
else {
display(p);
q->next = p->next;
free(p);
}
}
void insertSort(LinkList * L) {
LinkList * L1;
LinkList * p;
LinkList * q;
LinkList * s;
int len;
len = lengthList(L);
L1 = (LinkList *)malloc(sizeof(LinkList));
if (L->next) {
s = (LinkList *)malloc(sizeof(LinkList));
strcpy(s->data.sno, L->data.sno);
strcpy(s->data.sname, L->data.sname);
s->data.score = L->data.score;
s->next = NULL;
L1->next = s;
q = L->next;
}
else {
printf("╭═══════════════════════════════════╮n");
printf("║tThe student link list is empty!n║n");
printf("╰═══════════════════════════════════╯nn");
return;
}
while (q) {
p = L1->next;
while (p &&(p->data.score >= q->data.score)) {
p = p->next;
}
s = (LinkList *)malloc(sizeof(LinkList));
strcpy(s->data.sno, q->data.sno);
strcpy(s->data.sname, q->data.sname);
s->data.score = q->data.score;
if (!p) {
s->next = NULL;
p->next = s;
}
else {
s->next = p->next;
p->next = s;
}
q = q->next;
}
displayAll(L1);
}
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- C语言之单链表的插入、删除与查找
- C语言实现单链表逆序与逆序输出实例
- C语言单链表常见操作汇总
- c语言实现单链表算法示例分享
- C语言单链表实现多项式相加
- C语言单链表的实现
- 数据结构 C语言实现循环单链表的实例
- C语言实现学生信息管理系统(单链表)
- C语言实现单链表实现方法
- C语言单链表实现方法详解