#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
#include "malloc.h"
#include <stdlib.h>
#define MAX_LEN 10 /* 字符串最大长度 */
#define STU_NUM 30 /* 最多的学生人数 */
#define COURSE_NUM 6 /* 最多的考试科目数 */
#define LEN sizeof(struct Student)
typedef struct Student
{
long num; /* 每个学生的学号 */
char name[MAX_LEN]; /* 每个学生的姓名 */
float score[COURSE_NUM]; /* 每个学生COURSE_NUM门功课的成绩 */
float sum; /* 每个学生的总成绩 */
float aver; /* 每个学生的平均成绩 */
struct Student *next;
}STU;
int Menu(void); //创建菜单
void Print(STU *head, int n, int m); //打印函数
void AverSumofEveryStudent(STU *head, int n, int m); //计算每门课程的总分和平均分
void AverSumofEveryCourse(STU *head, int n, int m); //计算每个学生的总分和平均分
STU *SortbyScore(STU *head, int n); //按每个学生的总分由高到低排出名次表
STU *Creat(int n, int m); //创建链表并录入信息
STU *Creat1(int n, int m);
STU *SortbyScore1(STU *head, int n); //按每个学生的总分由低到高排出名次表
STU *SortbyNum(STU *head); //按学号由小到大排出成绩表
STU *SortbyName(STU *head, int n); //按姓名的字典顺序排出成绩表
void SearchbyNum(STU *head, int n, int m); //按学号查询学生排名及其考试成绩
void SearchbyName(STU *head, int n, int m); //按姓名查询学生排名及其考试成绩
void StatisticAnalysis(STU *head, int n, int m); //按类别及比例输出
void WritetoFile(STU *head, int n, int m); //将每个学生的纪录信息写入文件
STU *ReadfromFile(STU *head, int *n, int *m); //从文件中读出每个学生的纪录信息并显示
int main()
{
int n, m;
int i;
STU *head; //定义头节点
head = (STU *)malloc(LEN);
while (1)
{
i = Menu();
if (i == 1)
{
system("cls"); //清屏
printf("\t\t\t******************************************************************************\n");
printf("\t\t\tInput student number(n<30):\n"); //输入学生数
printf("\t\t\t");
scanf("%d", &n);
printf("\t\t\tInput course number(m<=6):\n");
printf("\t\t\t");
scanf("%d", &m);
}
switch (i)
{
case 1:
printf("\t\t\tInput student's ID, name and score:\n");
head = Creat(n, m);
system("cls"); //清屏
break;
case 2:
system("cls"); //清屏
AverSumofEveryStudent(head, n, m);
break;
case 3:
system("cls"); //清屏
AverSumofEveryCourse(head, n, m);
break;
case 4:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\tSort in ascending order by score:\n");
head = SortbyScore(head, n);
Print(head, n, m);
break;
case 5:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\tSort in ascending order by score:\n");
head = SortbyScore1(head, n);
Print(head, n, m);
break;
case 6:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\tSort in ascending order by number:\n");
head = SortbyNum(head);
Print(head, n, m);
break;
case 7:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\tSort in dictionary order by name:\n");
head = SortbyName(head, n);
Print(head, n, m);
break;
case 8:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\t******************************************************************************\n");
printf("\t\t\tInput the number you want to search:\n");
SearchbyNum(head, n, m);
break;
case 9:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\t******************************************************************************\n");
printf("\t\t\tInput the name you want to search:\n");
SearchbyName(head, n, m);
break;
case 10:
system("cls"); //清屏
StatisticAnalysis(head, n, m);
break;
case 11:
system("cls"); //清屏
printf("\n\n\n");
Print(head, n, m);
break;
case 12:
system("cls"); //清屏
WritetoFile(head, n, m);
break;
case 13:
system("cls"); //清屏
head = ReadfromFile(head, &n, &m);
break;
case 0:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\t******************************************************************************\n");
printf("\t\t\tEnd of program!\n");
printf("\t\t\t******************************************************************************\n");
return 0;
default:
system("cls"); //清屏
printf("\n\n\n");
printf("\t\t\t******************************************************************************\n");
printf("\t\t\tInput error!\n");
printf("\t\t\t******************************************************************************\n");
}
}
return 0;
}
// 创建菜单
int Menu(void)
{
int i;
system("title 学生成绩管理系统V7.0 By wyxiang");
printf("\n\n");
printf("\t\t\t 学生成绩管理系统V7.0\n");
printf("\t\t\t******************************************************************************\n");
printf("\t\t\t* Management for Students' scores *\n");
printf("\t\t\t* 1. Input record *\n");
printf("\t\t\t* 2. Caculate total and average score of every course *\n");
printf("\t\t\t* 3. Caculate total and average score of every student *\n");
printf("\t\t\t* 4. Sort in descending order by score *\n");
printf("\t\t\t* 5. Sort in ascending order by score *\n");
printf("\t\t\t* 6. Sort in ascending order by number *\n");
printf("\t\t\t* 7. Sort in dictionary order by name *\n");
printf("\t\t\t* 8. Search by number *\n");
printf("\t\t\t* 9. Search by name *\n");
printf("\t\t\t* 10. Statistic analysis *\n");
printf("\t\t\t* 11. List record *\n");
printf("\t\t\t* 12. Write to a file *\n");
printf("\t\t\t* 13. Read from a file *\n");
printf("\t\t\t* 0. Exit *\n");
printf("\t\t\t******************************************************************************\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t\t\t*****************Please Input your choice:");
scanf("%d", &i);
return i;
}
// 创建链表
STU *Creat(int n, int m) {
STU *head = NULL;
STU *p1 = NULL, *p2=NULL;
int i, j;
// system("cls");
for (i = 1; i<n + 1; i++)
{
p1 = (STU *)malloc(LEN);
printf("\t\t\t");
scanf("%ld", &p1->num);
printf("\t\t\t");
scanf("%s", p1->name);
for (j = 0; j<m; j++)
{
printf("\t\t\t");
scanf("%f", &p1->score[j]);
}
p1->next = NULL;
if (i == 1)
{
head = p2 = p1;
}
else
{
p2->next = p1;
p2 = p1;
}
}
return(head);
}
STU *Creat1(int n, int m)
{
STU *head = NULL;
STU *p1=NULL, *p2=NULL;
int i = 0, j = 0;
// system("cls");
for (i = 1; i<n + 1; i++)
{
p1 = (STU *)malloc(LEN);
p1->next = NULL;
if (i == 1)
{
head = p2 = p1;
}
else
{
p2->next = p1;
p2 = p1;
}
}
return(head);
}
void AverSumofEveryStudent(STU *head, int n, int m)
{
STU *p;
int i, j = 1;
char ch = '\0';
float sum;
p = head;
if (head != NULL)
{
printf("\t\t\t******************************************************************************\n");
for (i = 0; i<m; i++)
{
p = head;
sum = 0.0;
do {
sum += p->score[i];
p = p->next;
} while (p != NULL);
printf("\t\t\tcourse %d: sum=%.0f , aver=%.0f\n", j, sum, sum / n);
j++;
学生成绩管理系统.zip
需积分: 0 152 浏览量
更新于2023-02-24
收藏 22KB ZIP 举报
《C语言实现的学生成绩管理系统详解》
在信息技术领域,数据管理是至关重要的,尤其是在教育行业中,学生的成绩管理是一项基础但繁琐的工作。为了简化这一过程,我们可以利用编程技术,如C语言,来创建一个学生成绩管理系统。本文将深入探讨如何使用C语言设计并实现这样一个系统,包括其核心功能、实现原理以及可能遇到的问题。
C语言,作为一种基础且强大的编程语言,以其高效、灵活和可移植性而受到程序员的广泛喜爱。在构建学生成绩管理系统时,我们主要会用到C语言的数据结构(如数组、链表)和控制结构(如循环、条件语句),来实现对成绩数据的存储、检索和处理。
我们需要定义数据结构来存储学生信息和成绩。这通常可以采用结构体的形式,包含学生的姓名、学号以及若干科目的成绩。例如:
```c
typedef struct {
char name[20];
int id;
float scores[5]; // 假设最多五门科目
} Student;
```
然后,我们可以通过数组或链表来存储多个学生的信息。如果使用数组,可以直接在内存中分配连续的空间;若选择链表,每个节点将包含一个学生结构体和指向下一个节点的指针。
接下来,实现系统的功能模块,如添加新学生、查询学生信息、更新成绩、计算平均分等。这些功能的实现通常涉及对数据结构的遍历和操作。例如,添加新学生可能需要在数组末尾添加新的学生结构体,或者在链表中插入新的节点;查询学生信息则需要通过学号或姓名进行搜索;更新成绩则定位到特定学生并修改相应字段。
在处理成绩数据时,我们可能需要考虑一些特殊情况,比如输入验证、溢出检查以及成绩的格式化。此外,为了提高用户体验,还可以添加友好的交互界面,如命令行菜单或简单的图形用户界面。
为了确保数据的安全性和一致性,我们可以采用文件存储来持久化学生数据。C语言提供了标准库函数(如fopen、fwrite、fread等)来读写文件。每次系统启动时,可以从文件中加载数据;在系统退出或修改数据后,再将更新后的数据保存回文件。
系统的测试和调试环节同样关键。我们需要编写测试用例,覆盖各种可能的操作场景,以确保系统的正确性和稳定性。同时,良好的错误处理机制也是必不可少的,它可以防止因意外情况导致程序崩溃。
C语言实现的学生成绩管理系统是一个综合运用数据结构、文件操作和控制逻辑的项目。通过这个系统,我们可以高效地管理大量的学生信息,提高工作效率,同时也为初学者提供了一个学习和实践C语言编程的优秀平台。
kwennnnnn
- 粉丝: 531
- 资源: 2
最新资源
- 数据仓库与数据挖掘课件版
- 目标检测VOC格式数据集进行增强
- 异步SAR simulink模型(和virtuoso电路模型很像,精度自己可以改) 做MATLAB仿真,包括zoom或者其他混合架构adc可以用到这个模型
- 无人机检测数据集,VOC格式
- Matlab 直序列扩频通信系统仿真,完整代码
- 通信原理课程设计,直接序列扩频通信系统仿真设计 MATLAB实现
- 电赛-抢答器论文及其proteus仿真资料.rar
- 此案例是演示案例,大家可以看到Bmob的实时数据同步平台也就是数据监听是如何工作的 .zip
- comsol激光熔覆耦合超声
- 全国5级行政区域-区域编码、邮编、区号、经纬度SQL数据文件
- 静电势的泊松方程-Poisson Equation for Electrostatic Potential-matlab
- 基于OpenHarmony的智能阳台源代码+详细项目文档+硬件说明,能够实时监测室外环境是否下雨,超过设定的阈值时本地启动关窗马达,并上报关窗信息;并且能够对接华为IoT平台
- 浏览器端使用的Pandora 大数据客户端打点SDK.zip
- 前端分析-2023071100789
- SourceTreeSetup-3.4.15
- 王兆安电力电子技术全仿真 第3章 整流电路 1. 单相半波可控整流电路电阻负载 2. 单相半波可控整流电路电阻电感负载 3. 单相半波可控整流电路电阻电感负载带续流二极管 4. 单相桥式全控整流电路电