吐槽
这作业最开始写出来的代码<<<
可以说完全用数组写的了,而且一个文件写完(至少不是一个主函数还算好吧.jpg),头文件是什么不知道;结构体啥玩意,文件操作还是被迫的,
最后我还是重新写入一遍这作业
(虽然这个我写的一半就开始摆烂,随便乱来就是了,后面的注释已经被吃了)
作业题目
1、学生成绩管理系统
学生数据由学号、姓名、班级、三门课(数学、英语、计算机)的成绩和平均成绩构成。
实现功能包括:
(1)添加学生的记录
(2)查询学生(分别按学号和姓名)
(3)对学生数据排序(分别按平均成绩和计算机成绩的降序)
(4)删除学生记录
(5)修改学生记录
(6)班级成绩分析(各科平均成绩、最高分、最低分、及格率)
(7)输出学生信息表
源代码
全部文件
头文件
学生成绩管理系统.h
#ifndef _学生成绩管理系统_h_ // 避免重复声明
#define _学生成绩管理系统_h_ // 一般以文件名定义_xxx_x_
/*导入头文件*/
#include <stdio.h> //输入输出
#include <stdint.h> //数据类型重命名
#include <stdlib.h> //工具函数库:动态内存分配、退出程序...
/*结构体变量*/
typedef struct /*学生信息*/
{
uint64_t number;
char name[20];
char class[40];
float math;
float english;
float computer;
float average_score;
} report_struct;
typedef struct report_list /*学生信息的单向链表*/
{
report_struct data;
struct report_list *next;
struct report_list *last;
} report_list;
/*函数声明*/
report_list *report_list_Create_header();
void report_list_node_add(report_list *_node, report_list *_new_node);
void report_list_data_add(report_list *_node, report_struct *data);
report_list *report_list_number_seek(report_list *_header, uint64_t number);
report_list *report_list_name_seek(report_list *_header, char *_name);
report_list* report_list_class_forward_seek(report_list* _header, char* _class);
report_list* report_list_class_backward_seek(report_list* _header, char* _class);
void report_list_node_exchange(report_list *_node1, report_list *_node2);
void report_list_node_pop(report_list *_node);
int16_t Menu_input(int16_t start, int16_t stop);
void Add_student_record(report_list *_report_header);
report_list* Enquire_students_record(report_list* _report_header, int8_t flag);
void Sorting(report_list* _report_header);
void Sorting_average_score(report_list* _report_header);
void Sorting_computer(report_list* _report_header);
void Delete_student_record(report_list* _report_header);
void Revision_student_record(report_list* _report_header);
void Class_performance_analysis(report_list* _report_header);
void Output_student_information_sheet(report_list* _report_header);
void Exit_menu(report_list* _report_header);
void Save_student_information_sheet(report_list* _report_header);
void Import_student_information_sheet(report_list* _report_header);
#endif
主函数文件
main.c
#include "学生成绩管理系统.h"
void main()
{
int16_t menu_number;
report_list *_Student_information_sheet = report_list_Create_header();
while(1){
printf("1.添加学生的记录\n");
printf("2.查询学生(分别按学号和姓名)\n");
printf("3.对学生数据排序(分别按平均成绩和计算机成绩的降序)\n");
printf("4.删除学生记录\n");
printf("5.修改学生记录\n");
printf("6.班级成绩分析(各科平均成绩、最高分、最低分、及格率)\n");
printf("7.输出学生信息表\n");
printf("0.退出(1.保存学生信息表、2.导入学生信息表、0.退出)\n");
menu_number = Menu_input(0, 8);
switch (menu_number)
{
case 1:Add_student_record(_Student_information_sheet);printf("\n\n");break;
case 2:Enquire_students_record(_Student_information_sheet,0);printf("\n\n");break;
case 3: Sorting(_Student_information_sheet); printf("\n\n"); break;
case 4: Delete_student_record(_Student_information_sheet); printf("\n\n"); break;
case 5: Revision_student_record(_Student_information_sheet); printf("\n\n"); break;
case 6: Class_performance_analysis(_Student_information_sheet); printf("\n\n"); break;
case 7: Output_student_information_sheet(_Student_information_sheet); printf("\n\n"); break;
case 0: Exit_menu(_Student_information_sheet); printf("\n\n"); break;
}
}
}
/**
* @brief 返回菜单输入的编号(带校验)
* @param start:起始编号(包含)
* @param stop:终止编号(不包含)
* @retval 输入的数字编号
*/
int16_t Menu_input(int16_t start, int16_t stop)
{
int16_t input;
printf("\n输入[%hu,%hu):", start, stop);
while (1)
{
scanf_s("%hu", &input);
if (start <= input && input < stop)
break;
printf("输入错误\n");
}
printf("\n\n");
return input;
}
子函数文件
report_list.c