题目要求:
任务描述: 写⼀个命令⾏交互式C语⾔程序。该程序需要实现下述菜单功能:
1. 数据存储。 你需要将⼀系列的学⽣期末考试信息进⾏存储(学⽣⼈数不会超过100)。每个学⽣的信息包括:姓名(由 first name 和last name 两部分组成,例如Jingyu LI,first_name = "Jingyu" last_name = "LI") ;学号(12 位数字组成,开头4位为2022、2021、2020);C语⾔成绩(⼀个⼤于等于零的整数);重修信息(学号 2022………为否,其余为是);GPA等级(A+, A, B+, B, C+, C, D, F );班级排名(成绩相同需并列)。其 中,姓名,学号,成绩为输入数据,其余数据需要你计算。 同时,你需要添加⼀些维护数据库的功能 Add(name, id, score): 新增⼀个学⽣的信息; Delete(id): 根据学号删除某个学⽣的信息; Search(id):根据学号查找某个学⽣的信息。
2. 数据处理。 Sort_by_score(): ⽣成根据分数由⾼到低顺序排列学⽣信息的表格
3. 数据加密和解密 char* encrypt(int key): 加密学⽣成绩并返回 char* decrypt(int key, char *str): 解密学⽣成绩并返回 加密规则:把所有学⽣的成绩拼接成⼀个只包含数字的字符串,然后依据整数key对其进⾏加密。例如:数 字1被key=5加密之后变成6;数字5被key=5加密之后变成0。单个数字加密之后仍是单个数字。 解密规则与加密规则对称。
4. 数据分析 根据GPA对学⽣成绩进⾏考情分析:A+多少⼈,A多少⼈,以此类推。GPA等级参考SZTU评分等级。
5. ⽤户界⾯ 实现⼀个菜单,以供⽤户决定要使⽤哪个功能。
菜单参考:
Hello, pls input a series of student information!
(⽤户开始输入)
Okay, data upload finished. What do you what to do next? You can enter a number to tell me.
1 add
2 delete
3 search
4 sort by score
5 encrypt
6 decrypt
7 analysis
0 exit
(⽤户输入)
(输出计算结果)
Do you still need my service? You can enter a number to tell me.
1 add 2 delete 3 search 4 sort by score 5 encrypt 6 decrypt 7 analysis 0 exit
(⽤户输入) (输出计算结果)
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define ID_LENGTH 12
#define NAME_LENGTH 50
#define GPA_LENGTH 3
typedef struct {
char first_name[NAME_LENGTH];
char last_name[NAME_LENGTH];
char id[ID_LENGTH + 1];
int score;
char gpa[GPA_LENGTH];//GPA等级
char retake_info[4];//重修信息
int rank;//班级排名
} Student;
Student students[MAX_STUDENTS];//学生数组,用来存放每个学生的所有信息
int student_count = 0;//学生数量的全局变量
//计算学生GPA等级和重修信息的函数
void calculate_gpa_and_retake(Student* student) {
if (student->score >= 90)
{
strcpy(