要看详解点击这里

直说了,我使用的软件是vs,但是dev也可以运行,反倒是初次使用vs的同学,没有关掉sdl检查的话运行会报错,说是scanf啥的出问题。解决方法:项目->属性->C/C++->常规->SDL检查->将是改为否->保存。

直接上代码:

#include<stdio.h>
#include<string.h>//操作字符串
#include<stdlib.h>//malloc()函数 ,反回的类型是void*,要进行类型转换
#include<windows.h>//清屏函数头文件
#include<time.h>//调用并显示当前时间
#include<conio.h> //隐藏密码输入函数getch()的头文件 char password[20], key[20];//初始密码 void save_password(char s[]) {//将修改后的密码保存 FILE* fp = fopen("password.txt", "w+");fprintf(fp, "%s", s);fclose(fp);
}typedef struct Node {long long id;//学号char name[50];//姓名char sex[10];//性别int math, english, phisics, scatter, generation;//高等数学、大学英语、大学物理、离散数学、线性代数 int sum;//总分struct Node* next;
}node;node List;//链表 void hide_password(char* pswd, unsigned maxlen) {//隐藏密码进行输入 int index = 0;char buff = '\0';while ((buff = getch()) != '\r') {if (buff == '\b' && index != 0) {index--;printf("\b \b");}else if (index < maxlen - 1 && buff != '\b') {pswd[index++] = buff;putchar('*');}}pswd[index] = '\0';
}int readFile(node* L) {//读取文件 FILE* fpr = fopen("score.txt", "r");node st;node* s;node* t = L;if (fpr == NULL) {return 0;}else {while (fscanf(fpr, "%lld %s %s %d %d %d %d %d %d", &st.id, st.name, st.sex, &st.math, &st.english, &st.phisics, &st.scatter, &st.generation, &st.sum) != EOF) {s = (node*)malloc(sizeof(node));*s = st;t->next = s;t = s;t->next = NULL;}}fclose(fpr);//关闭文件指针 return 1;
}int saveFile(node* L) {//保存文件FILE* fpw = fopen("score.txt", "w");if (fpw == NULL) return 0;//打开文件失败 node* p = L->next;while (p != NULL) {fprintf(fpw, "%lld %s %s %d %d %d %d %d %d\n", p->id, p->name, p->sex, p->math, p->english, p->phisics, p->scatter, p->generation, p->sum);p = p->next;}fclose(fpw);//关闭文件指针 return 1;
}void enter() {//登录界面system("cls");//清屏 time_t t;struct tm* p;time(&t);p = gmtime(&t);printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**--------------%d年%02d月%02d日--------------**\n", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);printf("\t\t\t\t****************当前时间%02d时%02d分%***************\n", 8 + p->tm_hour, p->tm_min);printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**                                          **\n");printf("\t\t\t\t**             学生成绩管理系统             **\n");printf("\t\t\t\t**                                          **\n");printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**     感谢使用本系统,希望您使用愉快!     **\n");printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**    制作者:小菜鸡    学号:1008965223    **\n");printf("\t\t\t\t**         班级:计算机类201班              **\n");printf("\t\t\t\t**      学院:计算机与电子信息学院          **\n");printf("\t\t\t\t**********************************************\n");printf("请输入密码(初始密码123456)\n");int sum2 = 0;while (1) {FILE* fpr = fopen("password.txt", "r");char inital[20] = "123456";if (fpr == NULL)save_password(inital);else {hide_password(key, 21);printf("\n");fgets(password, 21, fpr);fclose(fpr);int n = strlen(key), m = strlen(password);if (n != m) {sum2++;if (sum2 >= 5) {printf("多次输入密码错误!系统关闭!\n");sum2 = 0;exit(0);}printf("密码错误!请重新输入!你还有%d次机会!\n", 5 - sum2);}else {int sum1 = 0;for (int i = 0; i < n; i++) {if (key[i] != password[i]) {sum1++;}}if (sum1 == 0) {printf("登录成功!\n");break;}else {sum2++;if (sum2 >= 5) {printf("多次输入密码错误!系统关闭!\n");sum2 = 0;exit(0);}printf("密码错误!请重新输入!你还有%d次机会!\n", 5 - sum2);}}}}
}void welcome() {//主菜单界面 system("cls");//清屏 time_t t;struct tm* p;time(&t);p = gmtime(&t);printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**--------------%d年%02d月%02d日--------------**\n", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday);printf("\t\t\t\t****************当前时间%02d时%02d分%***************\n", 8 + p->tm_hour, p->tm_min);printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**                                          **\n");printf("\t\t\t\t**               欢迎进入!                 **\n");printf("\t\t\t\t**                                          **\n");printf("\t\t\t\t**********************************************\n");printf("\t\t\t\t**---------------功能菜单-------------------**\n");printf("\t\t\t\t**       增加学生信息 ------------1         **\n");printf("\t\t\t\t**       删除学生信息 ------------2         **\n");printf("\t\t\t\t**       修改学生信息 ------------3         **\n");printf("\t\t\t\t**       查询学生信息 ------------4         **\n");printf("\t\t\t\t**       输出成绩排名 ------------5         **\n");printf("\t\t\t\t**       修改登录密码 ------------6         **\n");printf("\t\t\t\t**       退出管理系统 ------------0         **\n");printf("\t\t\t\t**********************************************\n");printf("请输入你想要进行的操作(数字): ");
}int change() {printf("注:修改密码后需要重新登录!\n");printf("请输入原来的密码:\n");while (1) {hide_password(key, 21);printf("\n");int n = strlen(key), m = strlen(password);if (n != m) {printf("密码错误!\n");}else {int sum = 0;for (int i = 0; i < n; i++) {if (key[i] != password[i]) {sum++;}}if (sum == 0) {break;}else {printf("密码错误!\n");}}}printf("请输入想要更改的密码:\n");hide_password(password, 21);save_password(password);printf("\n修改成功!请重新登录!\n");enter();return 0;
}void insertlist(node* L, node e) {//头插法,将学生信息插入到链表 node* h = L;//头节点 node* s = (node*)malloc(sizeof(node));*s = e;s->next = h->next;h->next = s;saveFile(L);
}node* searchid(long long id, node* L) {//按学号查找 node* p = L;while (p->next != NULL) {//遍历链表 if (p->next->id == id) {return p;}p = p->next;}return NULL;
}node* searchname(char name[], node* L) {//按姓名查找 node* p = L;while (p->next != NULL) {//遍历链表 if (strcmp(name, p->next->name) == 0) {return p;}p = p->next;}return NULL;
}void new_student(node* L) {//增加学生信息 system("cls");node st;int choice = 0;while (1) {printf("请输入新增学生相关信息\n");printf("学号(10位数):");while (1) {scanf("%lld", &st.id);node* p = searchid(st.id, L);if (p == NULL && st.id >= 1000000000 && st.id <= 9999999999) {break;}else {printf("该学生的学号已存在或长度不合理!请重新输入学号!\n");}}printf("姓名(中文最长不要超4个字):");while (1) {scanf("%s", st.name);node* p = searchname(st.name, L);int len = strlen(st.name);if (p == NULL && len <= 10) {break;}else {printf("该学生的姓名已存在或长度不合理!请重新输入姓名!\n");}}printf("性别(男|女):");while (1) {scanf("%s", st.sex);if (strlen(st.sex) == 2) {break;}else {printf("输入不合理!(性别应为:男 / 女)请重新输入性别!\n");}}printf("高数成绩(0~100):");while (1) {scanf("%d", &st.math);if (st.math >= 0 && st.math <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入高数成绩!\n");}}printf("英语成绩(0~100):");while (1) {scanf("%d", &st.english);if (st.english >= 0 && st.english <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入英语成绩!\n");}}printf("大物成绩(0~100):");while (1) {scanf("%d", &st.phisics);if (st.phisics >= 0 && st.phisics <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入大物成绩!\n");}}printf("离散成绩(0~100):");while (1) {scanf("%d", &st.scatter);if (st.scatter >= 0 && st.scatter <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入离散成绩!\n");}}printf("线代成绩(0~100):");while (1) {scanf("%d", &st.generation);if (st.generation >= 0 && st.generation <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入线代成绩!\n");}}st.sum = st.math + st.english + st.phisics + st.scatter + st.generation;insertlist(&List, st);printf("是否需要继续输入学生信息?(是:1 / 否:0)\n");scanf("%d", &choice);if (choice == 0) {break;}}
}void deletestu(node* pr) {//删除学生信息 node* s = pr->next;pr->next = s->next;s->next = NULL;free(s);//释放节点空间
}void delete_student(node* L) {//删除学生信息 system("cls");long long id;node* p;printf("请输入删除学生的学号(10位数):");scanf("%lld", &id);node* st = searchid(id, L);p = st;if (st == NULL) {printf("查无此人!");return;}st = st->next;printf("_________________________________________________________________________________\n");printf("|学号\t\t|姓名\t|性别\t|高数\t|英语\t|大物\t|离散\t|线代\t|总分\t|\n");;printf("_________________________________________________________________________________\n");printf("|%lld\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n", st->id, st->name, st->sex, st->math, st->english, st->phisics, st->scatter, st->generation, st->sum);printf("_________________________________________________________________________________\n");deletestu(p);saveFile(L);
}void modify_student(node* L) {//修改学生信息 system("cls");int choice = -1;long long  id;printf("请输入要查找的学生学号(10位数):");scanf("%lld", &id);node* st = searchid(id, L);if (st == NULL) {printf("查无此人!");return;}st = st->next;while (1) {system("cls");printf("_________________________________________________________________________________\n");printf("|学号\t\t|姓名\t|性别\t|高数\t|英语\t|大物\t|离散\t|线代\t|总分\t|\n");printf("_________________________________________________________________________________\n");printf("|%lld\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n", st->id, st->name, st->sex, st->math, st->english, st->phisics, st->scatter, st->generation, st->sum);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("**********************************************\n");printf("请输入要修改的信息:");scanf("%d", &choice);switch (choice) {case 1:printf("请输入姓名(中文最长不要超过4个字):");while (1) {scanf("%s", st->name);node* p = searchname(st->name, L);int len = strlen(st->name);if (p == NULL && len <= 10) {break;}else {printf("该姓名已存在或长度不合理!请重新输入姓名!\n");}}break;case 2:printf("请输入性别(男|女):");while (1) {scanf("%s", st->sex);if (strlen(st->sex) == 2) {break;}else {printf("输入不合理!(性别应为:男 / 女)请重新输入性别!\n");}}break;case 3:printf("请输入高数成绩(0~100):");while (1) {scanf("%d", &st->math);if (st->math >= 0 && st->math <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入高数成绩!\n");}}break;case 4:printf("请输入英语成绩(0~100):");while (1) {scanf("%d", &st->english);if (st->english >= 0 && st->english <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入英语成绩!\n");}}break;case 5:printf("请输入大物成绩(0~100):");while (1) {scanf("%d", &st->phisics);if (st->phisics >= 0 && st->phisics <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入大物成绩!\n");}}break;case 6:printf("请输入离散成绩(0~100):");while (1) {scanf("%d", &st->scatter);if (st->scatter >= 0 && st->scatter <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入离散成绩!\n");}}break;case 7:printf("请输入线代成绩(0~100):");while (1) {scanf("%d", &st->generation);if (st->generation >= 0 && st->generation <= 100) {break;}else {printf("输入的分数不合理!应在0~100之间!请重新输入线代成绩!\n");}}break;}st->sum = st->math + st->english + st->phisics + st->scatter + st->generation;printf("是否继续修改该学生的信息?(是:1/否:0)\n");scanf("%d", &choice);if (choice == 0) {printf("修改成功!修改后该学生的信息与成绩如下:\n");break;}}printf("_________________________________________________________________________________\n");printf("|学号\t\t|姓名\t|性别\t|高数\t|英语\t|大物\t|离散\t|线代\t|总分\t|\n");printf("_________________________________________________________________________________\n");printf("|%lld\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n", st->id, st->name, st->sex, st->math, st->english, st->phisics, st->scatter, st->generation, st->sum);printf("_________________________________________________________________________________\n");saveFile(L);
}void search_student(node* L) {//查询学生信息 system("cls");int choice = 0;long long id;char name[50];node* st;printf("按学号查询----- 1\n");printf("按姓名查询----- 2\n");printf("请输入查询方式:");scanf("%d", &choice);if (choice == 1) {printf("请输入要查询的学号(10位数):");scanf("%lld", &id);st = searchid(id, L);if (st == NULL) {printf("查无此人!\n");}else {st = st->next;printf("_________________________________________________________________________________\n");printf("|学号\t\t|姓名\t|性别\t|高数\t|英语\t|大物\t|离散\t|线代\t|总分\t|\n");printf("_________________________________________________________________________________\n");printf("|%lld\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n", st->id, st->name, st->sex, st->math, st->english, st->phisics, st->scatter, st->generation, st->sum);printf("_________________________________________________________________________________\n");}}else if (choice == 2) {printf("请输入要查询的姓名:");scanf("%s", name);st = searchname(name, L);if (st == NULL) {printf("查无此人!\n");}else {st = st->next;printf("_________________________________________________________________________________\n");printf("|学号\t\t|姓名\t|性别\t|高数\t|英语\t|大物\t|离散\t|线代\t|总分\t|\n");printf("_________________________________________________________________________________\n");printf("|%lld\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n", st->id, st->name, st->sex, st->math, st->english, st->phisics, st->scatter, st->generation, st->sum);printf("_________________________________________________________________________________\n");}}
}
int maxscore(node* L, int mode) {//查找各科最高分 int max = 0;node* p = L->next;if (mode == 1) {//高数最高分 while (p != NULL) {if (p->math > max) {max = p->math;}p = p->next;}return max;}else if (mode == 2) {//英语最高分 while (p != NULL) {if (p->english > max) {max = p->english;}p = p->next;}return max;}else if (mode == 3) {//大物最高分 while (p != NULL) {if (p->phisics > max) {max = p->phisics;}p = p->next;}return max;}else if (mode == 4) {//离散最高分 while (p != NULL) {if (p->scatter > max) {max = p->scatter;}p = p->next;}return max;}else if (mode == 5) {//线代最高分 while (p != NULL) {if (p->generation > max) {max = p->generation;}p = p->next;}return max;}else if (mode == 6) {//总分最高分 while (p != NULL) {if (p->sum > max) {max = p->sum;}p = p->next;}return max;}}bool cmp(node a, node b) {//排序比较规则 return a.sum > b.sum;//从大到小排序
}void ScoreSort(node* L) {//将学生成绩进行排序,从高到低 for (node* p = L->next; p != NULL; p = p->next) {for (node* q = p; q != NULL; q = q->next) {if (!cmp(*p, *q)) {//如果不符合排序规则则进行交换 //交换数据域node t = *p;*p = *q;*q = t;//交换指针域t.next = p->next;p->next = q->next;q->next = t.next;}}}
}void output_sort(node* L) {//输出学生信息 system("cls");ScoreSort(&List);node* p = L->next;if (p != NULL) {printf("_________________________________________________________________________________\n");printf("|学号\t\t|姓名\t|性别\t|高数\t|英语\t|大物\t|离散\t|线代\t|总分\t|\n");printf("_________________________________________________________________________________\n");while (p != NULL) {printf("|%lld\t|%s\t|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t|%d\t|\n", p->id, p->name, p->sex, p->math, p->english, p->phisics, p->scatter, p->generation, p->sum);printf("_________________________________________________________________________________\n");;p = p->next;}}printf("高数最高分:%d  ", maxscore(&List, 1)); printf("英语最高分:%d\n", maxscore(&List, 2));printf("大物最高分:%d  ", maxscore(&List, 3)); printf("离散最高分:%d\n", maxscore(&List, 4));printf("线代最高分:%d  ", maxscore(&List, 5)); printf("总分最高分:%d\n", maxscore(&List, 6));}void printflove() {//打印爱心 float a, x, y;for (y = 1.5f; y > -1.5f; y -= 0.1f) {for (x = -1.5f; x < 1.5f; x += 0.05f) {a = x * x + y * y - 1;char ch = a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' ';putchar(ch);}printf("\n");printf("\t\t\t  ");}
}void goodbye() {//结束程序 system("cls");printflove();printf("\t**********************************************\n");printf("\t\t\t\t**                                          **\n");printf("\t\t\t\t**        欢迎下次使用!~再见!~~           **\n");printf("\t\t\t\t**                                          **\n");printf("\t\t\t\t**********************************************\n");exit(0);
}
int main()//主函数
{int choice = 0;enter();readFile(&List);//进入程序后先读取文件,少了这句之前存的成绩都不能输出来 while (1) {welcome();scanf("%d", &choice);switch (choice) {case 1:new_student(&List);//增加学生信息 break;case 2:delete_student(&List);//删除学生信息 break;case 3:modify_student(&List);//修改学生信息 break;case 4:search_student(&List);//查询学生信息 break;case 5:output_sort(&List);//输出成绩排名 break;case 6:change();//修改密码 break;case 0:goodbye();//结束程序break;}printf("是否需要继续操作?(是:1/否:0)\n");scanf("%d", &choice);if (choice == 0) {goodbye();}}return 0;
}

(C语言实现)班级成绩管理系统源代码相关推荐

  1. C语言程序设计-班级成绩管理系统

    一.报告内容要求: 1.题目:班级成绩管理系统. 2.设计要求:对一个有N个学生的班级,每个学生有M门课程.该系统实现对班级成绩的录入.显示.修改.排序.保存等操作的管理. 3:功能要求:a.成绩录入 ...

  2. c语言编译班级成绩管理系统,C语言实现班级成绩管理系统

    C语言课程设计--班级成绩管理系统,供大家参考,具体内容如下 题目: 对一个有N个学生的班级,每个学生有M门课程.该系统实现对班级成绩的录入.显示.修改.排序.保存等操作的管理.功能 要求: (1)本 ...

  3. 班级成绩管理系统设计c语言,C语言程序设计-班级成绩管理系统.doc

    PAGE 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 班级成绩管理系统 专 业 机械设计 班 级 1083班 学 号 201013090303 姓 名 陈 玲 珑 指导教师 王 颖 2 ...

  4. C语言:班级成绩管理系统

    文章目录 前言: 程序要求 说明 代码 main.c def.c myIO.c file.c menu.c function.c 前言: 有朋友最近在做c语言课设,要求写一个班级成绩管理系统,便写份简 ...

  5. c语言成绩管理系统完整vc6,学生成绩管理系统源代码

    <学生成绩管理系统源代码>由会员分享,可在线阅读,更多相关<学生成绩管理系统源代码(25页珍藏版)>请在人人文库网上搜索. 1.一.课程设计(论文)题目学生成绩管理系统二.本次 ...

  6. C语言学生成绩管理系统源代码

    分享:C语言学生成绩管理系统设计 <C语言程序设计>实训报告 点击查看 ----> C语言学生成绩管理系统(课程设计报告书) 扫描下方公众号,发送 成绩系统 4个字,获取下载源码. ...

  7. 班级成绩管理系统(C语言)

    文章目录 一.设计任务与目标 二.实现功能 三.程序源码 四.效果展示 一.设计任务与目标 对一个有N个学生的班级,每个学生有M门课程.该系统实现对班级成绩的录入.显示.修改.排序.保存等操作的管理. ...

  8. c语言程序设计班档案管理系统报告,C语言程序设计班级档案管理系统报告文档.doc...

    C语言程序设计班级档案管理系统报告文档 课 程 设 计 报 告 课程名称 <C语言程序设计> 课题名称 班级档案管理系统 专 业 计算机科学与技术专业 班 级 计算机1103班 学 号 姓 ...

  9. c语言程序学生成绩系统论文,c语言程序设计-学生成绩管理系统论文.doc

    c语言程序设计-学生成绩管理系统论文 C语言程序设计课程设计报告 - PAGE 11 - 中南民族大学工商学院 电子信息与计算机技术系 项目名称: 学生成绩管理系统 学生姓名: 学 号: 班 级: 指 ...

最新文章

  1. JavaScript如何获得input元素value值
  2. 曝台积电芯片要涨价:2022年至少上调10%
  3. 创业者们的19个Surprises
  4. 中文幽默语料库构建与计算项目(幽默等级识别,幽默类型识别,隐喻类型识别,隐喻情绪识别)
  5. eclipse 点击 ctrl+鼠标左键看不了源码问题解决
  6. 解决MATLAB的xlsread函数读取表格失败
  7. 主数据管理之二:主数据管理系统的功能组件
  8. 项目计划应该怎么样做?看这一篇就够了!
  9. Keras:ModelCheckpoint和model.fit的verbose有什么差异?
  10. 计算机科学有科研,计算机科学领域科研合著网演化分析
  11. 电脑总是弹出explorer.exe->应用程序错误界面(电脑小妙招)
  12. PTA-链表学习-----奇数值结点链表
  13. MongoDB4.2.0安装包并配上安装教程
  14. 服务器部署邮件功能_真正连续部署的功能标志
  15. VScode安装教程,十分详细!(windows版本)
  16. 隔行的BT.656标准信号
  17. Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(一)
  18. 关于pytorch的upsample_bilinear2d的align_corners和half_pixel等参数确定
  19. Java基于GUI完成的猜数字小游戏
  20. MATLAB的FIR滤波算法

热门文章

  1. 闪存增寿 - Wear Leveling磨损均衡
  2. Error Domain=NSURLErrorDomain Code=-1202
  3. python小游戏 打砖块小游戏设计与实现
  4. 艾肯4nano_Utrack_micu_mobile等声卡调试_网络主播防坑必学技能
  5. MATLAB透镜成像特征曲线及分析(二)
  6. 【博弈论】耶鲁大学公开课--博弈论Problem Set 2--Solution
  7. 富格林有限公司:现货黄金交易亏损后怎样解决?
  8. 全球领先智能化集装箱管理方案,小程序随时随地AI自动集装箱信息识别+箱况残损+地点报备,中集飞瞳智能化船公司智能航运智能货运铁路
  9. 电子签章盖章之jQuery插件jquery.zsign
  10. Python进行企业资产状况分析