源代码:

test.c文件

#define _CRT_SECURE_NO_WARNINGS 1#include"student.h"void menu()
{printf("-------------------------------------------------------------------\n");printf("||            ^^^***The information of student***^^^             ||\n");printf("===================================================================\n");printf("|| 1、Input the information         2、Put out the information   ||\n");printf("|| 3、Search for the information    4、Modify the information    ||\n");printf("|| 5、Show the max                  6、Delete the information    ||\n");printf("|| 7、Work out the total or average 8、Sort                      ||\n");printf("|| 9、Save the information          0、Exit the system           ||\n");printf("===================================================================\n");printf("    |   The user can make a choice from the fuction above:   |     \n");
}int main()
{int input;ReadInformation();do{menu();printf("\n请输入您需要选择的操作:");scanf("%d", &input);switch (input){case 1:InputInformation();printf("录入成功!\n");SaveInformation();break;case 2:PutInformation();break;case 3:SearchInformation();break;case 4:ModifyInformation();SaveInformation();break;case 5:ShowMax();break;case 6:DeleteInformation();SaveInformation();break;case 7:Average();break;case 8:Sort();break;case 9:SaveInformation();break;case 0:SaveInformation();printf("\n成功退出,欢迎下次使用!\n");break;default:printf("\n输入错误请重新输入!\n");break;}} while (input);return 0;
}

student.h文件

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_STU_CLASS 20
#define MAX_AVG 5typedef struct stu_type
{char name[MAX_NAME];   //名字long num;               //学号int age;                //年龄char sex[MAX_SEX];      //性别char stu_class[MAX_STU_CLASS];  //班级double C;double M;double E;double S;double sum;
}student;
// 创建链表typedef struct _Node
{student stu;   //学生struct _Node *pNext;    //指向下一个节点的指针
}Node;//函数声明
void SaveInformation();     //保存学生信息
void ReadInformation();     //读取学生信息
void InputInformation();    //信息录入
void PutInformation();      //展示信息
void SearchInformation();   //查找信息
void ModifyInformation();   //修改信息
void ShowMax();             //显示最高分
void DeleteInformation();   //删除信息
void Average();             //平均分
void Sort();
void PrintfInfo(Node *p);//排序

student.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"student.h"//头结点
Node *g_phead = NULL;
Node *last = NULL;//ok
void SaveInformation()
{Node *p=g_phead;FILE *pfwrite=fopen("student.dat","w");if (pfwrite == NULL){printf("SaveInformation::%s", strerror(errno));}while (p){fwrite(&(p->stu), sizeof(student), 1, pfwrite);p = p->pNext;}fclose(pfwrite);pfwrite = NULL;
}
//ok
void ReadInformation()
{student tem = {0};FILE *pfread=fopen("student.dat","r");if (pfread == NULL){printf("ReadInformation::%s", strerror(errno));return;}while (fread(&tem, sizeof(student), 1, pfread)){Node *pNewNext = (Node*)malloc(sizeof(Node));pNewNext->pNext = NULL;pNewNext->stu = tem;if (g_phead == NULL){g_phead = pNewNext;}else{pNewNext->pNext = g_phead;g_phead = pNewNext;}}fclose(pfread);pfread = NULL;
}     //
//ok
void InputInformation()
{//创建链表//创建一个新结点Node *pNewNode = (Node*)malloc(sizeof(Node));pNewNode->pNext = NULL;//头插法if (g_phead == NULL){g_phead = pNewNode;}else{pNewNode->pNext = g_phead;g_phead = pNewNode;}//输入学生信息printf("请输入学生信息\n");printf("请输入学生姓名:");scanf("%s",g_phead->stu.name);printf("请输入学生学号:");scanf("%ld", &g_phead->stu.num);printf("请输入学生年龄:");scanf("%d", &g_phead->stu.age);printf("请输入学生性别:");scanf("%s", g_phead->stu.sex);printf("请输入学生班级:");scanf("%s", g_phead->stu.stu_class);printf("请输入学生语文成绩:");scanf("%lf", &g_phead->stu.C);printf("请输入学生数学成绩:");scanf("%lf", &g_phead->stu.M);printf("请输入学生英语成绩:");scanf("%lf", &g_phead->stu.E);printf("请输入学生体育成绩:");scanf("%lf", &g_phead->stu.S);g_phead->stu.sum = g_phead->stu.C + g_phead->stu.M +g_phead->stu.E + g_phead->stu.S;}
//ok
void PutInformation()
{Node *p = g_phead;printf("\n\n%-8s%-15s%-5s%-5s%-10s%-8s%-8s%-8s%-8s%-8s\n","姓名", "学号", "年龄", "性别", "班级", "语文","数学", "英语", "体育","总分");while (p != NULL){PrintfInfo(p);p=p->pNext;}printf("\n\n");
}
//ok
void SearchInformation()
{int num;char stu_class[MAX_STU_CLASS];long n;char name[MAX_NAME];Node *p = g_phead;printf("请选择查找方式: 1、按班级 2、按学号 3、按姓名\n");if (p == NULL){printf("提示:暂未存储任何信息!\n");return;}scanf("%d", &num);if (num == 1){printf("请输入需要查找人的班级:");scanf("%s", &stu_class);printf("\n\n%-8s%-15s%-5s%-5s%-10s%-8s%-8s%-8s%-8s%-8s\n","姓名", "学号", "年龄", "性别", "班级", "语文","数学", "英语", "体育", "总分");while (p != NULL){if (strcmp(p->stu.stu_class, stu_class) == 0){PrintfInfo(p);}p = p->pNext;}}else if (num == 2){printf("请输入需要查找人的学号:");scanf("%ld", &n);printf("\n\n%-8s%-15s%-5s%-5s%-10s%-8s%-8s%-8s%-8s%-8s\n","姓名", "学号", "年龄", "性别", "班级", "语文","数学", "英语", "体育", "总分");while (p != NULL){if (p->stu.num == n){               PrintfInfo(p);}p = p->pNext;}}else if (num == 3){printf("请输入需要查找人的姓名:");scanf("%s", &name);printf("\n\n%-8s%-15s%-5s%-5s%-10s%-8s%-8s%-8s%-8s%-8s\n","姓名", "学号", "年龄", "性别", "班级", "语文","数学", "英语", "体育", "总分");while (p != NULL){if (strcmp(p->stu.name,name)==0){PrintfInfo(p);}p = p->pNext;}}else{printf("输入错误,该操作不存在!\n");}
}
//ok
void ModifyInformation()
{int cnt = 0;char name[MAX_NAME];printf("请输入需要修改人的姓名:");scanf("%s", &name);Node *p = g_phead;while (p != NULL){if (strcmp(p->stu.name, name) == 0){printf("请输入学生姓名:");scanf("%s", p->stu.name);printf("请输入学生学号:");scanf("%ld", &p->stu.num);printf("请输入学生年龄:");scanf("%d", &p->stu.age);printf("请输入学生性别:");scanf("%s", p->stu.sex);printf("请输入学生班级:");scanf("%s", p->stu.stu_class);printf("请输入学生语文成绩:");scanf("%lf", &p->stu.C);printf("请输入学生数学成绩:");scanf("%lf", &p->stu.M);printf("请输入学生英语成绩:");scanf("%lf", &p->stu.E);printf("请输入学生体育成绩:");scanf("%lf", &p->stu.S);p->stu.sum = p->stu.C + p->stu.M +p->stu.E + p->stu.S;cnt = 1;}p = p->pNext;}if (cnt == 1)printf("修改成功!\n");elseprintf("该姓名不存在!\n");}void ShowMax()
{int i;printf("各科最高分的人和各分数为:\n");printf("\n\n            %-8s%-15s%-5s%-5s%-10s%-8s%-8s%-8s%-8s%-8s\n","姓名", "学号", "年龄", "性别", "班级", "语文","数学", "英语", "体育", "总分");Node *p1 = g_phead, *p2 = g_phead, *p3 = g_phead, *p4 = g_phead, *p5 = g_phead;Node *p = g_phead;while (p){if (p->stu.C>p1->stu.C){p1 = p;}if (p->stu.M>p2->stu.M){p2 = p;}if (p->stu.E>p3->stu.E){p3 = p;}if (p->stu.S>p4->stu.S){p4 = p;}if (p->stu.sum>p5->stu.sum){p5 = p;}p = p->pNext;}printf("语文最高分:");PrintfInfo(p1);printf("数学最高分:");PrintfInfo(p2);printf("英语最高分:");PrintfInfo(p3);printf("体育最高分:");PrintfInfo(p4);printf("总分最高分:");PrintfInfo(p5);
}
//ok
void DeleteInformation()
{char name[MAX_NAME];Node *p1;printf("请输入需要删除人的姓名:");scanf("%s",name);if (g_phead == NULL){printf("未存储任何信息!\n");return;}//是头结点if (strcmp(name, g_phead->stu.name) == 0){p1 = g_phead;g_phead = g_phead->pNext;free(p1);p1 = NULL;printf("删除成功!\n");return;}//不是头结点Node *p=g_phead;Node *p2;while (p->pNext!= NULL){if (strcmp(name, p->pNext->stu.name) == 0){p2 = p->pNext;p->pNext = p2->pNext;free(p2);p2 = NULL;printf("删除成功!\n");return;}p = p->pNext;}printf("未找到该人,删除失败!\n");}
//ok
void Average()
{double avg[MAX_AVG] = { 0 };Node *p = g_phead;int cnt=0,i;while (p){avg[0] += p->stu.C;avg[1] += p->stu.M;avg[2] += p->stu.E;avg[3] += p->stu.S;avg[4] += p->stu.sum;cnt++;p = p->pNext;}for (i = 0; i < MAX_AVG; i++){avg[i] /= cnt;}printf("语文平均分:%.2f\n", avg[0]);printf("数学平均分:%.2f\n", avg[1]);printf("英语平均分:%.2f\n", avg[2]);printf("体育平均分:%.2f\n", avg[3]);printf("总分平均分:%.2f\n", avg[4]);
}
//ok——保存的地方存在问题
void Sort()
{//按总分排序int s;Node *p1,*p2;student tem;//选择排序printf("请选择排序方式:1、按总分排序 2、按学号排序\n");scanf("%d", &s);if (s == 1 ){for (p1 = g_phead; p1 != NULL; p1 = p1->pNext){for (p2 = p1->pNext; p2 != NULL; p2 = p2->pNext){if (p1->stu.sum < p2->stu.sum){tem = p1->stu;p1->stu = p2->stu;p2->stu = tem;}}}}else if (s== 2){for (p1 = g_phead; p1 != NULL; p1 = p1->pNext){for (p2 = p1->pNext; p2 != NULL; p2 = p2->pNext){if (p1->stu.num > p2->stu.num){tem = p1->stu;p1->stu = p2->stu;p2->stu = tem;}}}}else{printf("输入错误!");}}void PrintfInfo(Node *p)
{printf("%-8s%-15ld%-5d%-5s%-10s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n",p->stu.name,p->stu.num,p->stu.age,p->stu.sex,p->stu.stu_class,p->stu.C,p->stu.M,p->stu.E,p->stu.S,p->stu.sum);
}

遇到的问题:

1、链表的创建,有两个.c文件时,头结点创建在.h文件中有重复创建的错误。将头结点创建在一个.c文件中就能够解决这个问题。

2、输入问题,当进入选择菜单时候输入字符a、字符串、非数字就会输入错误进入死循环

解决办法:

A、可以使用清理输入流fflush(stdin),缺点:循环输入的话会变成只能输入一次

B、可以使用while()来执行里面的消除字符,但如果直接这样while(getchar())就会进入无限循环,所以我们可以让其接收一个终止条件,每次输入完我们都会按回车,那就让其接收'\n'换行符终止自己的循环。
        while (scanf("%d", &f) != 1)
        {
            puts("输入非法");
            while(getchar()!='\n');
        }

3、保存问题。当排完序之后再进行保存,保存的是倒叙,下次再次读取的时候就会倒叙输出。

用C语言写学生成绩管理系统相关推荐

  1. mysql c语言写学生成绩管理系统,学生成绩管理系统C++实现代码

    本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下 * (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学 ...

  2. 用c语言实现成绩统计的设计,c语言实现学生成绩管理系统.doc

    c语言实现学生成绩管理系统.doc 学号102128121武汉理工大学华夏学院课程设计报告书课程名称:数据结构题目:用C语言实现成绩统计程序的设计系名:信息工程系专业班级:软件工程1121姓名:指导教 ...

  3. c语言学生管理系统write to a text file,语言编程学生成绩管理系统.doc

    语言编程学生成绩管理系统 c语言编程-学生成绩管理系统 #include /*引用库函数*/ #include #include #include typedef struct /*定义结构体数组*/ ...

  4. c语言编写简单的成绩管理系统,用c语言编写学生成绩管理系统

    <用c语言编写学生成绩管理系统>由会员分享,可在线阅读,更多相关<用c语言编写学生成绩管理系统(9页珍藏版)>请在人人文库网上搜索. 1.include#include#inc ...

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

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

  6. C语言实现学生成绩管理系统(原码)

    C语言实现学生成绩管理系统(单链表实现)很详细容易理解 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl ...

  7. 影碟管理系统c语言小学期,大连东软小学期C语言项目学生成绩管理系统代码.docx...

    大连东软小学期C语言项目学生成绩管理系统代码 /*链表版学生成绩管理系统的main函数与链表构建模块的代码*/#include #include #include struct STUDENT{ ch ...

  8. C语言编写学生成绩管理系统

    文章链接:https://codemouse.online/archives/2020-06-04-16-07-48 需求 用C语言编写学生成绩管理系统,要求该系统可 对学生操作:添加和删除操作. 可 ...

  9. c语言成绩管理系统总结分析报告,c语言下学生成绩管理系统程序设计报告

    <c语言下学生成绩管理系统程序设计报告>由会员分享,可在线阅读,更多相关<c语言下学生成绩管理系统程序设计报告(17页珍藏版)>请在人人文库网上搜索. 1.信息技术学院本科课程 ...

最新文章

  1. cookie的路径和域
  2. 特邀丨前阿里巴巴产品运营专家、中国计算机学会专业会员,揭秘增长共同点
  3. 在Spring MVC中使用Velocity
  4. php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解
  5. LeetCode刷题(33)
  6. mongoDB的配置以及运行
  7. selenium+python自动化82-只截某个元素的图
  8. eclipse里安装SVN插件的两种方式
  9. python绘图练习
  10. 【笔记】C++ 命令行小游戏 节奏大师(别踩白块) 的制作
  11. 在Windows10操作系统中搭建ftp服务器
  12. 亚马逊运营最常见家50问(上)
  13. 神经网络如何识别图像,神经网络与模式识别
  14. 【联邦学习】联邦学习量化——non-iid数据集下的仿真
  15. Q for Mortals2笔记 -- 造型和枚举
  16. i2c子系统-----mpu6050
  17. ArcGIS Pro处理气温nc文件(降水同理)批量导出各月栅格文件
  18. 多人开源博客系统 - 再搜集
  19. 大连装修设计师 大连家装设计师 大连全屋定制设计师 大连独立设计师
  20. Grails GSP 标签集合

热门文章

  1. 区块链冷链食品追溯系统
  2. Spring 学习 (三)大话AOP
  3. 【万人千题】结对编程排位赛(第一期) 第二周 排名公布,冠军成功卫冕,啊这……
  4. 最坏的不是面试被拒,而是没面试机会,以面试官视角分析哪些简历至少能有面试机会
  5. oracle 查看锁表 清除锁表
  6. java毕业设计智能交通管控系统Mybatis+系统+数据库+调试部署
  7. Android入门文档
  8. 用DirectX做2D游戏的三种方法
  9. 2022中科院分区表弃用影响因子,多方官宣
  10. PPP中的pap和chap认证