在此我希望记录一下自己的学习成果,并且期待与大家交流讨论。

代码如下:

#include<stdio.h>
#include<conio.h>             //直接选择
#include<stdlib.h>            //system清屏,动态存储,程序结束exit(0)
#include<Windows.h>           //窗口颜色
#include<string.h>            //比较字符数组
#define len sizeof(struct grade)
#define len1 sizeof(struct order)
struct grade
{char name[20];char number[20];float chinese;float math;float english;float sum;float weighted;struct grade* next;
};
struct order
{int ord;struct order* next;
};
struct grade* head;
struct order* head1;
void menu();      //一般来说可以把主函数写在后面,只需声明嵌套调用的函数即可void Print()
{printf("\t你好,管理员!\n\n");printf("\t\t0:修改密码");printf("\t\t1:成绩录入\n");printf("\t\t2:成绩输出");printf("\t\t3:求平均值\n");printf("\t\t4:按总分排序");printf("\t\ta:语文排序\n");printf("\t\tb:数学排序");printf("\t\tc:英语排序\n");printf("\t\td:加权总分排序\n");printf("\t\t5:查找学生成绩");printf("\t\t6:查看学科不及格\n");printf("\t\t7:修改学生成绩");printf("\t\t8:删除学生成绩\n");printf("\t\tp:返回主菜单");printf("\t\tz:退出系统");printf("\n\t请输入指令:");
}
int identity()
{FILE* fp;char p[20], c[20], ch;int i, n;fp = fopen("password.txt", "r");fgets(p, 20, fp);printf("请输入密码:\n");for (n = 0; n < 3; n++){for (i = 0; (ch = _getch()) != 13;)       //回车键ansic为13{if (ch == 8)      //退格8{printf("\b");putchar(' ');printf("\b");if (i > 0)i--;}else{c[i] = ch;printf("*");i++;}}c[i] = '\0';         //使其后面有个'\0'if (0 == strcmp(c, p)){system("cls");printf("\n登录成功!\t");break;}else{system("cls");printf("密码错误!\n请重新输入\n");}}return(n);
}
void alter()
{FILE * fp;char p[20], c[20], ch;int i;fp = fopen("password.txt", "r");fgets(p, 20, fp);fclose(fp);printf("请输入原密码\n");for (i = 0; (ch = _getch()) != 13;){if (ch == 8){printf("\b");putchar(' ');printf("\b");if (i > 0)i--;}else{c[i] = ch;printf("*");i++;}}c[i] = '\0';if (strcmp(c, p) != 0){printf("密码错误!");goto flag1;}printf("\n请输入新密码:\n");for (i = 0; (ch = _getch()) != 13;){if (ch == 8){printf("\b");putchar(' ');printf("\b");if (i > 0)i--;}else{c[i] = ch;printf("*");i++;}}c[i] = '\0';printf("\n确认新密码:\n");for (i = 0; (ch = _getch()) != 13;){if (ch == 8){printf("\b");putchar(' ');printf("\b");if (i > 0)i--;}else{p[i] = ch;printf("*");i++;}}p[i] = '\0';if (0 == strcmp(c, p)){fp = fopen("password.txt", "w");fputs(p, fp);printf("\n修改成功!");}
flag1:;
}
void save()
{FILE * fp;struct grade * cur;fp = fopen("stu.dat", "wb");for (cur = head; cur != NULL; cur = cur->next)fwrite(cur, len, 1, fp);fclose(fp);
}
void load()
{struct grade *cur, *pre;FILE * fp;int f_end;fp = fopen("stu.dat", "rb");cur = (struct grade*)malloc(len);pre = head = cur;fseek(fp, 0, 2);f_end = ftell(fp);fseek(fp, 0, 0);while (ftell(fp) != f_end){fread(cur, len, 1, fp);pre = cur;cur = (struct grade*)malloc(len);pre->next = cur;}pre->next = NULL;fclose(fp);
}
void loadsort()
{struct grade *cur, *pre, *max;struct order *cur1, *pre1;int n, i, N;cur1 = (struct order*)malloc(len1);pre1 = head1 = cur1;for (N = 0, cur = head; cur != NULL; cur = cur->next)      //算出几个数据N++;for (n = 0; n < N; n++)        //循环N次{for (pre = head, cur = head; cur != NULL; cur = cur->next){if (cur->sum > pre->sum)pre = cur;                        //pre指向最大sum的地址}for (max = head, i = 1; max != pre; max = max->next)   //检索是第几个节点i++;pre->sum = 0;                  //使每次录入的最大sum变成0,之后再还原cur1->ord = i;pre1 = cur1;cur1 = (struct order*)malloc(len1);    //将最大sum的节点依次存在链表order中pre1->next = cur1;}pre1->next = NULL;for (cur = head; cur != NULL; cur = cur->next)             //还原!cur->sum = cur->chinese + cur->math + cur->english;
}
void input()
{struct grade *cur, *pre;char ch;printf("重新录入:a\t\t追加:其他任意键\n");ch = _getch();system("cls");if (ch == 'a'){cur = (struct grade*)malloc(len);head = cur;printf("重新录入");}else{for (pre = head; pre->next != NULL; pre = pre->next);cur = (struct grade*)malloc(len);pre->next = cur;printf("追加");}pre = head;printf("\t\n请依次输入:\n若要结束录入,请输入0!\n\n");while (1){printf("学号:");scanf("%s", cur->number);if (strcmp(cur->number, "0") == 0)break;printf("姓名:");scanf("%s", cur->name);printf("成绩:");scanf_s("%f%f%f", &cur->chinese, &cur->math, &cur->english);pre = cur;cur = (struct grade*)malloc(len);pre->next = cur;}pre->next = NULL;for (cur = head; cur != NULL; cur = cur->next){cur->sum = cur->chinese + cur->math + cur->english;cur->weighted = 0.2*cur->chinese + 0.5*cur->math + 0.3*cur->english;}save();printf("录入成功!\n");
}
void output()
{struct grade * cur;FILE *fp;fp = fopen("学生成绩单.txt", "w");fprintf(fp, "学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t总分\t\t加权总分");printf("学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t总分\t\t加权总分\n");for (cur = head; cur != NULL; cur = cur->next){printf("%-16s%-16s%-16.1f%-16.1f%-16.1f%-16.1f%-16.1f\n", cur->number, cur->name, cur->chinese, cur->math, cur->english, cur->sum, cur->weighted);fprintf(fp, "\n%s\t\t%s\t\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f", cur->number, cur->name, cur->chinese, cur->math, cur->english, cur->sum, cur->weighted);}fclose(fp);printf("成绩单输出成功!");
}
void average()
{float sum, c, m, e, s, w;struct grade * cur;int N;for (N = 0, cur = head; cur != NULL; cur = cur->next)N++;for (sum = 0, cur = head; cur != NULL; cur = cur->next)sum = sum + cur->chinese;c = sum / N;for (sum = 0, cur = head; cur != NULL; cur = cur->next)sum = sum + cur->math;m = sum / N;for (sum = 0, cur = head; cur != NULL; cur = cur->next)sum = sum + cur->english;e = sum / N;for (sum = 0, cur = head; cur != NULL; cur = cur->next)sum = sum + cur->sum;s = sum / N;for (sum = 0, cur = head; cur != NULL; cur = cur->next)sum = sum + cur->weighted;w = sum / N;printf("语文\t\t数学\t\t英语\t\t总分\t\t加权总分\n");printf("%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", c, m, e, s, w);
}
void sort()
{struct grade *cur;struct order *cur1;int i;printf("名次如下:\n\n");printf("学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t总分\n");for (cur1 = head1; cur1 != NULL; cur1 = cur1->next){for (i = 1, cur = head; i < cur1->ord; i++)        //输出cur = cur->next;printf("%-16s%-16s%-16.1f%-16.1f%-16.1f%-16.1f\n", cur->number, cur->name, cur->chinese, cur->math, cur->english, cur->sum);}printf("\n排序完成!\n");
}
void csort()
{struct grade *cur;struct order *cur1;int i;printf("名次如下:\n\n");printf("学号\t\t姓名\t\t语文\n");for (cur1 = head1; cur1 != NULL; cur1 = cur1->next){for (i = 1, cur = head; i < cur1->ord; i++)        //输出cur = cur->next;printf("%-16s%-16s%-16.1f\n", cur->number, cur->name, cur->chinese);}printf("\n排序完成!\n");
}
void msort()
{struct grade *cur;struct order *cur1;int i;printf("名次如下:\n\n");printf("学号\t\t姓名\t\t数学\n");for (cur1 = head1; cur1 != NULL; cur1 = cur1->next){for (i = 1, cur = head; i < cur1->ord; i++)        //输出cur = cur->next;printf("%-16s%-16s%-16.1f\n", cur->number, cur->name, cur->math);}printf("\n排序完成!\n");
}
void esort()
{struct grade *cur;struct order *cur1;int i;printf("名次如下:\n\n");printf("学号\t\t姓名\t\t英语\n");for (cur1 = head1; cur1 != NULL; cur1 = cur1->next){for (i = 1, cur = head; i < cur1->ord; i++)        //输出cur = cur->next;printf("%-16s%-16s%-16.1f\n", cur->number, cur->name, cur->english);}printf("\n排序完成!\n");
}
void wsort()
{struct grade *cur;struct order *cur1;int i;printf("名次如下:\n\n");printf("学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t加权总分\n");for (cur1 = head1; cur1 != NULL; cur1 = cur1->next){for (i = 1, cur = head; i < cur1->ord; i++)        //输出cur = cur->next;printf("%-16s%-16s%-16.1f%-16.1f%-16.1f%-16.1f\n", cur->number, cur->name, cur->chinese, cur->math, cur->english, cur->weighted);}printf("\n排序完成!\n");
}
void fail()
{struct grade * cur;printf("不及格的同学如下\n");printf("学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t总分\t\t加权总分\n");for (cur = head; cur != NULL; cur = cur->next){if (cur->chinese < 90 || cur->math < 90 || cur->english < 90)printf("%-16s%-16s%-16.1f%-16.1f%-16.1f%-16.1f%-16.1f\n", cur->number, cur->name, cur->chinese, cur->math, cur->english, cur->sum, cur->weighted);}
}
void change()
{struct grade * cur;int i;char ch, temp[20];printf("请输入学生学号:");scanf("%s", temp);for (cur = head; cur != NULL; cur = cur->next){if (strcmp(cur->number, temp) == 0)break;}if (cur == NULL){printf("不存在该同学!");return;}printf("学号%s\t姓名%s\t语文%.1f\t数学%.1f\t英语%.1f\n", cur->number, cur->name, cur->chinese, cur->math, cur->english);printf("请选择:\n1:学号\t2:姓名\t3:语文\t4:数学\t5:英语\n\n");while (1){ch = _getch();switch (ch){case'1':printf("学号:");scanf("%s", cur->number);break;case'2':printf("姓名:");scanf("%s", cur->name);break;case'3':printf("语文:");scanf_s("%f", &cur->chinese);break;case'4':printf("数学:");scanf_s("%f", &cur->math);break;case'5':printf("英语:");scanf_s("%f", &cur->english);break;default:printf("指令错误!");}printf("若要停止修改,请按z\n");ch = _getch();if (ch == 'z')break;elseprintf("请继续选择\n");}cur->sum = cur->chinese + cur->math + cur->english;cur->weighted = 0.2*cur->chinese + 0.5*cur->math + 0.3*cur->english;save();printf("修改完成!");
}
void del()
{struct grade * cur, *temp, *flag;int i;char ch, number[20];printf("请输入学生学号:");scanf("%s", number);for (flag = head; flag != NULL; flag = flag->next){if (strcmp(flag->number, number) == 0)break;}if (flag == NULL){printf("不存在该同学!");return;}printf("确认删除请按y\n");ch = _getch();if (ch == 'y'){for (cur = head; cur->next != flag;)cur = cur->next;temp = flag->next;if (temp == NULL)cur->next = NULL;elsecur->next = temp->next;save();printf("删除成功!");}}
void check(struct grade * flag)
{struct grade * cur, *pre;struct order * cur1;int i, a, b, c, d, e;   //存放名次loadsort();for (a = 1, cur1 = head1; cur1->next != NULL; cur1 = cur1->next, a++){for (i = 1, pre = head; i < cur1->ord; i++)pre = pre->next;if (pre == flag)break;}for (cur = head; cur->next != NULL; cur = cur->next)cur->sum = cur->chinese;              //sum变成chineseloadsort();for (b = 1, cur1 = head1; cur1->next != NULL; cur1 = cur1->next, b++){for (i = 1, pre = head; i < cur1->ord; i++)pre = pre->next;if (pre == flag)break;}for (cur = head; cur->next != NULL; cur = cur->next)cur->sum = cur->math;loadsort();for (c = 1, cur1 = head1; cur1->next != NULL; cur1 = cur1->next, c++){for (i = 1, pre = head; i < cur1->ord; i++)pre = pre->next;if (pre == flag)break;}for (cur = head; cur->next != NULL; cur = cur->next)cur->sum = cur->english;loadsort();for (d = 1, cur1 = head1; cur1->next != NULL; cur1 = cur1->next, d++){for (i = 1, pre = head; i < cur1->ord; i++)pre = pre->next;if (pre == flag)break;}for (cur = head; cur->next != NULL; cur = cur->next)cur->sum = cur->weighted;loadsort();for (e = 1, cur1 = head1; cur1->next != NULL; cur1 = cur1->next, e++){for (i = 1, pre = head; i < cur1->ord; i++)pre = pre->next;if (pre == flag)break;}printf("\n\n学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t总分\t\t加权总分\n");printf("%-16s%-16s%-16.1f%-16.1f%-16.1f%-16.1f%-16.1f\n", flag->number, flag->name, flag->chinese, flag->math, flag->english, flag->sum, flag->weighted);printf("\n总分排名为:\t\t第%d名\n", a);printf("语文排名为:\t\t第%d名\n", b);printf("数学排名为:\t\t第%d名\n", c);printf("英语排名为:\t\t第%d名\n", d);printf("加权总分排名为:\t\t第%d名\n", e);
}
void man_check()
{struct grade * flag;char temp[20];printf("请输入要查找的学生学号:");scanf("%s", temp);for (flag = head; flag != NULL; flag = flag->next){if (strcmp(flag->number, temp) == 0)break;}if (flag == NULL){printf("不存在该同学!");return;}elsecheck(flag);
}
void max1()
{struct grade *cur, *pre;for (cur = head, pre = head; cur != NULL; cur = cur->next){if (cur->chinese > pre->chinese)pre = cur;                        //pre指向最大的地址}printf("学号:%-16s姓名:%-16s为语文最高分:%.1f\n", pre->number, pre->name, pre->chinese);for (cur = head, pre = head; cur != NULL; cur = cur->next){if (cur->math > pre->math)pre = cur;}printf("学号:%-16s姓名:%-16s为数学最高分:%.1f\n", pre->number, pre->name, pre->math);for (cur = head, pre = head; cur != NULL; cur = cur->next){if (cur->english > pre->english)pre = cur;}printf("学号:%-16s姓名:%-16s为英语最高分:%.1f\n", pre->number, pre->name, pre->english);for (cur = head, pre = head; cur != NULL; cur = cur->next){if (cur->sum > pre->sum)pre = cur;}printf("学号:%-16s姓名:%-16s为总分最高分:%.1f\n", pre->number, pre->name, pre->sum);for (cur = head, pre = head; cur != NULL; cur = cur->next){if (cur->weighted > pre->weighted)pre = cur;}printf("学号:%-16s姓名:%-16s为加权总分最高分:%.1f\n", pre->number, pre->name, pre->weighted);
}void manager()
{struct grade *cur;char ch;int i;system("cls");if (identity() == 3){printf("系统关闭!");exit(0);}while (1){system("cls");Print();ch = _getch();system("cls");switch (ch){case'0':printf("修改密码\n\n");alter();break;case'1':printf("成绩录入\n\n");input();break;case'2':printf("成绩输出\n\n");output();break;case'3':printf("平均分:\n\n");average();break;case'4':printf("总分排序\n");loadsort();sort();break;case'a':printf("语文排序\n");for (cur = head; cur != NULL; cur = cur->next)cur->sum = cur->chinese;              //sum变成chineseloadsort();csort();break;case'b':printf("数学排序\n");for (cur = head; cur != NULL; cur = cur->next)cur->sum = cur->math;loadsort();msort();break;case'c':printf("英语排序\n");for (cur = head; cur != NULL; cur = cur->next)cur->sum = cur->english;loadsort();esort();break;case'd':printf("加权总分排序\n");for (cur = head; cur != NULL; cur = cur->next)cur->sum = cur->weighted;loadsort();wsort();break;case'5':printf("查找学生\n\n");man_check(); break;case'6':printf("显示不及格\n");fail(); break;case'7':printf("修改\n");change(); break;case'8':printf("删除\n");del(); break;case'p':menu(); break;case'z':printf("系统关闭!"); exit(0);default:printf("指令错误\n");}printf("\n\n\n按任意键继续操作");_getch();}
}
int student()
{struct grade* cur;char ch, temp[20];int N, i;for (N = 0, cur = head; cur != NULL; N++)cur = cur->next;system("cls");printf("同学你好!\n请输入你的学号:");scanf("%s", temp);for (cur = head; cur != NULL; cur = cur->next){if (strcmp(cur->number, temp) == 0)break;}if (cur == NULL){printf("不存在该同学!");return 1;}while (1){system("cls");printf("\n\t\t1:查看自我成绩");printf("\n\t\t2:查看班级最高分");printf("\n\t\tp:返回主菜单");printf("\n\t\tz:退出系统");printf("\n\t请输入指令:");ch = _getch();system("cls");switch (ch){case'1':printf("\n成绩如下\n\n");check(cur);break;case'2':printf("\n最高分如下\n\n");max1();break;case'p':menu(); break;case'z':printf("系统关闭!");exit(0);default:printf("指令错误\n");}printf("\n\n\n按任意键继续操作");_getch();}return 0;
}
void menu()
{char ch;printf("\t欢迎使用“孤铉”学生成绩管理系统\n\n");printf("\t管理员登录请按m\t\t学生登录请按s\n");printf("\n\n\n退出系统请按z\n");while (1){ch = _getch();switch (ch){case'm':manager();break;case's':if (student() ){printf("\n\n\t管理员登录请按m\t\t学生登录请按s\n");printf("\n\n\n退出系统请按z\n");}break;case'z':printf("系统关闭!");exit(0);default:printf("\n指令错误!\t请重新输入指令");}}
}
int main()
{system("color f1");           //16进制,前面是背景,后面是字体颜色load();menu();
}

纯c语言----学生成绩管理系统相关推荐

  1. 用C语言学生成绩数据库排序功能设计,[c语言学生成绩管理系统]C语言学生成绩管理系统实验报告...

    篇一 : C语言学生成绩管理系统实验报告 实 验 四:结构体(6学时) 实验目的: 1.更加灵活的使用数组作为函数参数: 2.初步掌握开发一个小型实用系统的基本方法: 3.初步掌握书写程序设计开发文档 ...

  2. c语言按给定成绩查询,C语言学生成绩管理系统(简易版)

    #include #include #include int readstudents(struct students stu[]); //读取学生信息 int readsexcode(struct ...

  3. C语言学生成绩管理系统(课程设计报告书)

    今天再跟大家分享一份课程设计报告:C语言学生成绩管理系统源码 程序设计组成框图: #include<stdio.h> #include<conio.h> #include< ...

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

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

  5. c语言成绩管理系统教程,C语言学生成绩管理系统教程.doc

    C语言学生成绩管理系统教程 实训报告 题 目: 学生成绩管理系统院 系: 专 业: 姓 名: 学 号: 指导教师: 日 期: 目录 TOC \o "1-3" \h \z \u HY ...

  6. c语言成绩管理系统报告书,C语言学生成绩管理系统实验报告

    <C语言学生成绩管理系统实验报告>由会员分享,可在线阅读,更多相关<C语言学生成绩管理系统实验报告(22页珍藏版)>请在人人文库网上搜索. 1.学生成绩管理系统实验报告实验名称 ...

  7. C语言 学生成绩管理系统 带登录界面

    C语言 学生成绩管理系统 带登录界面 C语言课程设计 思路 部分展示 代码片段 C语言课程设计 先上要求: 思路 为了方便简单,直接利用结构体数组来存储学生学生,最后根据功能编写函数即可. 部分展示 ...

  8. c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)

    复制时运行出错请看这里:c语言学生成绩管理系统 添加公众号回复 学管 免费获取源代码 代做可私聊 c语言学生成绩管理系统(增.删.查.改.排序.分析优秀及格率等)详细内容 一.功能描述 实现学生基本信 ...

  9. c语言学生成绩管理系统课设作业,C语言课程设计——学生成绩管理系统

    摘 要 学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来人们使用传统人工的方式 ...

  10. 更新学生的成绩C语言,学生成绩管理系统C语言代码实现.pdf

    学生成绩管理系统C语言代码实现 这篇文章主要为大家详细介绍了C语言代码实现学生成绩管理系统,文中示 代码介绍的非常详细,具有一定的参 考价值,感兴趣的小伙伴们可以参考一下 C语言实现了学生成绩管理系统 ...

最新文章

  1. python【蓝桥杯vip练习题库】ALGO-66字符串编辑
  2. svn: Can't convert string from 'UTF-8' to native encoding
  3. 2019,GMIS归来!杨强、吴恩达等全球重磅嘉宾共话数据智能
  4. Kubernetes学习之路(四)之Node节点二进制部署
  5. java创建计数器变量,用于检查变量(计数器)最大长度的Java方法
  6. 判断激光雷达性能好坏必了解的指标
  7. Linux驱动开发-编写W25Q64(Flash)驱动
  8. springboot 银联支付(扫码支付)
  9. 《14天从0到1学Java》第一天之04第一行Java代码
  10. 苹果mac系统下浏览器video无法自动播放问题
  11. 流程图,梳理基本流和备选流,编写测试用例
  12. 利用云服务器搭建hadoop集群
  13. Android事件总线 ( AndroidEventBus ) 开源库发布
  14. Python中有self和没有self的问题
  15. ServiceComb微服务框架
  16. 竖流式沉淀池三角堰计算_竖流式沉淀池设计计算
  17. 美丽乡村可行性研究报告
  18. 开源多端合一小程序源码系统+前端+后端+搭建教程
  19. js 监听扫描枪输入事件
  20. 知网查重TMLC与PLMC有什么区别

热门文章

  1. 环状序列|得分(UVa1584|UVa1585)
  2. 借助图灵机器人+20行代码实现微信智能聊天
  3. 欧若科技通过 OpenKG 开放 Nebula Graph 图数据库
  4. ubuntu双系统怎么完全删除ubuntu系统(主要是删除引导)
  5. DBMS Implementation 笔记 05: SIMC CATC 以及 Join 操作的实现
  6. 计算机格式化命令符号,格式化c盘命令是什么 格式化c盘会怎么样【图文】
  7. golang 微信商户平台支付平台V3
  8. android获取电话通话记录,Android获取手机通话记录
  9. 五分钟了解机器学习的基本概念
  10. luogu P3332 [ZJOI2013]K大数查询