这只是一个简单的版本,还有待于后续更新。
具有以下几个功能:
1.读取文件获取学生信息(特定文件)
2.添加学生信息
3.修改学生信息
4.删除学生信息
5.查找学生信息
6.对学生按成绩进行排序
7.输出所有学生的信息
8.保存学生信息到指定文件
创建学生信息与链表更新
typedef struct Student { char name[100]; //姓名 char number[100]; //学号 char sex[10]; //性别 int age; //年龄 int score; //成绩 int telephone[100] //手机号 char place[100] //地址 }stu; typedef struct LN { stu data; struct LN* next; }Link; void Insert(Link* L, Link* p) //插入新的节点 { Link* q = L; p->next = q->next; q->next = p; }
载入界面,退出界面,菜单
void gotoxy(int i, int j) //移动光标 { COORD position = { i,j }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position); } void welocome() //登陆界面 { system("color b1"); printf("\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ 欢迎访问学生信息管理系统! ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★\n"); printf("\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n"); int i, m; CONSOLE_CURSOR_INFO cursor_info = { 1, 0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); gotoxy(46, 7); printf(" Loading......\n"); for (i = 10, m = 1; i < 60; i++, m += 2) { gotoxy(82, 10); printf(" "); gotoxy(82, 10); printf("%-2d%%", m); gotoxy(82, 10); printf(" "); gotoxy(82, 10); printf("%-2d%%", m + 1); gotoxy(i + 20, 10); printf("》"); Sleep(i + m); } } void tail() //退出界面 { system("color b1"); printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n"); puts("\t | |"); puts("\t | |"); puts("\t | 感谢访问学生信息管理系统! |"); puts("\t | |"); puts("\t | |"); puts("\n "); } void menu() //功能菜单 { system("color f2"); printf("\t ________________________________________________ \n"); printf("\t | |\n"); printf("\t | 学生信息管理系统 |\n"); printf("\t | |\n"); printf("\t | 1、增加学生信息 |\n"); printf("\t | 2、删除学生信息 |\n"); printf("\t | 3、修改学生信息 |\n"); printf("\t | 4、查找学生的信息 |\n"); printf("\t | 5、按照学生成绩排序 |\n"); printf("\t | 6、浏览全部学生信息 |\n"); printf("\t | 7、保存学生信息到文件 |\n"); printf("\t | 0、退出系统 |\n"); printf("\t | |\n"); printf("\t |________________________________________________|\n"); printf("请输入您要选择的功能键:"); }
添加学生
void add(Link* L) //增加新的学生 { system("color f2"); printf("请输入学生的信息:\n"); printf("学号:"); scanf("%s", number); Link* q = L->next; while (q != NULL) { if (strcmp(q->data.number, number) == 0) //判断学生是否存在 { printf("该生已存在\n"); break; } q = q->next; } if (q == NULL) { Link* p= (Link*)malloc(sizeof(Link));; p->next = NULL; strcpy(p->data.number, number); printf("姓名:"); scanf("%s", name); strcpy(p->data.name, name); printf("性别:"); scanf(" %s", sex); strcpy(p->data.sex, sex); printf("年龄:"); scanf("%d", &age); p->data.age = age; printf("总成绩:"); scanf("%d", &score); p->data.score = score; Insert(L, p); } printf("按任意键继续"); getch(); system("cls"); }
删除学生
void deletestu(Link* L) //删除学生 { system("color f2"); printf("请输入您要删除的学生的学号:"); scanf("%s", number); Link* p, * pre; if (L->next == NULL) { printf("还没有学生信息,请增加学生信息\n"); return; } pre = L; p = pre->next; int judge = 0; while (p) { if (strcmp(p->data.number, number) == 0) { judge = 1; pre->next = p->next; free(p); printf("删除学生成功\n"); break; } pre = p; p = p->next; } if (judge == 0) printf("该生不存在\n"); printf("按任意键继续"); getch(); system("cls"); }
修改学生信息
void change(Link* L) //修改学生信息 { int judge = 0, n = 0; char a = 0; system("color f2"); printf("请输入您要修改学生的学号:"); scanf("%s", number); Link* q = L->next; while (q != NULL) { if (strcmp(q->data.number, number) == 0) { judge = 1; do { printf("请选择您要修改的信息: 1.姓名 2.学号 3.性别 4.年龄 5.总成绩 0.取消\n"); loop: scanf("%d", &n); switch (n) { case 0: break; case 1: printf("请输入您要修改的姓名:"); scanf("%s", name); printf("修改的姓名为:%s\n请确认是否修改[Y/N]", name); getchar(); a = getchar(); if (a == 'y' || a == 'Y') { strcpy(q->data.name, name); printf("修改成功!\n"); } else printf("修改失败!\n"); break; case 2: printf("请输入您要修改的学号:"); scanf("%s", number); printf("修改的学号为:%s\n请确认是否修改[Y/N]", number); getchar(); a = getchar(); if (a == 'y' || a == 'Y') { strcpy(q->data.number, number); printf("修改成功!\n"); } else printf("修改失败!\n"); break; case 3: printf("请输入您要修改的性别:"); scanf("%s", sex); printf("修改的性别为:%s\n请确认是否修改[Y/N]", sex); getchar(); a = getchar(); if (a == 'y' || a == 'Y') { strcpy(q->data.sex, sex); printf("修改成功!\n"); } else printf("修改失败!\n"); break; case 4: printf("请输入您要修改的年龄:"); scanf("%d", &age); printf("修改的年龄为:%d\n请确认是否修改[Y/N]", age); getchar(); a = getchar(); if (a == 'y' || a == 'Y') { strcpy(q->data.age, age); printf("修改成功!\n"); } else printf("修改失败!\n"); break; case 5: printf("请输入您要修改的总成绩"); scanf("%d", &score); printf("修改的总成绩为:%d\n请确认是否修改[Y/N]", score); getchar(); a = getchar(); if (a == 'y' || a == 'Y') { strcpy(q->data.score, score); printf("修改成功!\n"); } else printf("修改失败!\n"); break; default: printf("请输入正确的选项\n"); goto loop; break; } printf("是否继续修改\n按任意键继续修改 按0退出\n"); n = getch()-48; } while (n); } q = q->next; } if (judge == 0) { printf("该生不存在\n"); } system("cls"); }
查找学生
void find(Link* L) //查找学生 { int flag; system("color b1"); printf("1.按学号查询:\n"); printf("2.按姓名查询:\n"); printf("请输入查询方式:"); scanf("%d", &flag); if (flag == 1) { printf("请输入该生学号:"); scanf("%s", number); Link* q = L->next; while (q != NULL) { if (strcmp(q->data.number, number) == 0) { printf("姓名:%s\n", q->data.name); printf("学号:%s\n", q->data.number); printf("性别:%s\n", q->data.sex); printf("年龄:%d\n", q->data.age); printf("总成绩:%d\n", q->data.score); break; } q = q->next; } if (q == NULL) printf("该生不存在\n"); } else { printf("请输入该生姓名:"); scanf("%s", name); Link* q = L->next; while (q != NULL) { if (strcmp(q->data.name, name) == 0) { printf("姓名:%s\n", q->data.name); printf("学号:%s\n", q->data.number); printf("性别:%c\n", q->data.sex); printf("年龄:%d\n", q->data.age); printf("总成绩:%d\n", q->data.score); break; } q = q->next; } if (q == NULL) printf("该生不存在\n"); } getchar(); printf("按任意键继续"); getch(); system("cls"); }
浏览全部学生信息
void display(Link* L) //浏览全部学生信息 { Link* q = L->next; if (q == NULL) { printf("还没有学生信息,请增加学生信息\n"); return; } while (q) { system("color f2"); printf(" 学号:%s 姓名:%s 性别:%s 年龄:%d 总成绩:%d \n", q->data.number, q->data.name, q->data.sex, q->data.age,q->data.score); q = q->next; } printf("按任意键继续"); getch(); system("cls"); }
排序
void sort(Link* L) //按成绩排序排序 并输出排序后的结果 { system("color f2"); Link* q, * p, * r = L->next; if (r == NULL) { printf("还没有学生信息,请增加学生信息\n"); return; } while (r) { p = r; q = r->next; Link* tp= (Link*)malloc(sizeof(Link)); //用于排序时暂存数据 tp->next = NULL;; while (q) { if (q->data.score > p->data.score) { //复制q结点信息到tp strcpy(tp->data.number, q->data.number); strcpy(tp->data.name, q->data.name); strcpy(tp->data.sex, q->data.sex); tp->data.age = q->data.age; tp->data.score = q->data.score; //复制p结点信息到q strcpy(q->data.number, p->data.number); strcpy(q->data.name, p->data.name); strcpy(q->data.sex, p->data.sex); q->data.age = p->data.age; q->data.score = p->data.score; //复制tp结点信息到p strcpy(p->data.number, tp->data.number); strcpy(p->data.name, tp->data.name); strcpy(p->data.sex, tp->data.sex); p->data.age = tp->data.age; p->data.score = tp->data.score; } q = q->next; } r = r->next; } printf("排序后的学生信息是:\n"); display(L); }
读取文件与保存文件
void readfile(Link* L) //读取文件内容 { FILE* fp; fp = fopen("student.txt", "rb"); //打开文件 if (fp == NULL) { printf("文件不存在\n"); return; } else { printf("已获取文件内容\n"); } int i = 0; while (!feof(fp)) { fscanf(fp, " %s %s %s %d %d", number, name, sex, &age, &score); i++; } fclose(fp); FILE* FP; FP = fopen("student.txt", "rb"); //打开文件 int b = i - 1, j = 1; while (!feof(FP)) { fscanf(FP, "%s %s %s %d %d", number, name, sex, &age, &score); Link* n = (Link*)malloc(sizeof(Link)); n->next = NULL; strcpy(n->data.number, number); strcpy(n->data.name, name); strcpy(n->data.sex, sex); n->data.age = age; n->data.score = score; Insert(L, n); //插入新的节点 if (j == b) break; j++; } fclose(FP); //关闭文件 } void save(Link* L) //保存学生信息到文件 { FILE* fp; Link* p = L->next; int judge = 0; if ((fp = fopen("student.txt", "w")) == NULL) //打开文件 { printf("不能打开此文件!\n"); return; } while (p) { fprintf(fp, "%s %s %s %d %d \n", p->data.number, p->data.name, p->data.sex, p->data.age, p->data.score); p = p->next; } printf("保存成功\n"); fclose(fp); getchar(); printf("按任意键继续"); getch(); system("cls"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)