简易版学生系统

任务描述:
写⼀个命令⾏交互式C语⾔程序。该程序需要实现下述菜单功能: 1. 数据存储。
你需要将⼀系列的学⽣期末考试信息进⾏存储(学⽣⼈数不会超过100)。每个学⽣的信息包括:姓名
(由 first name 和last name 两部分组成,例如Xiaoer He,first_name = “Xiaoer” last_name = “He”)
;学号(12 位数字组成,开头4位为2021 、2020 、2019); C语⾔成绩(⼀个⼤于等于零的整数);
重修信息(学号 2021………为否,其余为是); GPA等级(A+, A, B+, B, C+, C, D, F );班级排名(成绩相同需并列)。 其中,姓名,学号,成绩为输入数据,其余数据需要你计算。
同时,你需要添加⼀些维护数据库的功能
Add(name, id, score): 新增⼀个学⽣的信息;
Adds(n, name[], id[], score[]): 批量新增n个学⽣的信息;
Delete(id): 根据学号删除某个学⽣的信息;
Search(id) :根据学号查找某个学⽣的信息。
2. 数据处理。
Sort_by_id(): ⽣成根据学号顺序排列学⽣信息的表格
Sort_by_score(): ⽣成根据分数由⾼到低顺序排列学⽣信息的表格
Max():返回最⾼分学⽣信息
Min(): 返回最低分学⽣信息
Ave(): 返回所有学⽣期末成绩平均分
prime(id): 返回某个学⽣的成绩是否为素数
coprime(id, id) :返回某两个学⽣的成绩是否互质/互素

#define _CRT_SECURE_NO_WARNINGS 1
#define MAX 100
#define MAX_NAME 50
#define MAX_NUM 50#include
#include
enum Option
{EXIT,//0ADD,//1ADDS,//2DEL,//3SEARCH,//4SORTID,//5SORTSORCE,//6BEST,//7WORST,//8PRIME,//9COPRIME,//10MODIFY,//11AVE,//12SHOW,//13
};struct PeoInfo
{char name[MAX_NAME];int grade;char num[MAX_NUM];char GPA[50];char rebuild[20];int rinking;
};//表格类型
struct Form
{struct PeoInfo data[MAX];//存放一个信息int size;//记录当前已经有的元素个数
};//声明函数
//初始化表格函数
void InitForm(struct Form* ps);//排名函数
void Rinking(struct Form* ps);//增加一个信息到表格
void AddForm(struct  Form* ps);// 增加多个信息到表格
void AddsForm(struct Form* ps);//打印表格中的信息
void ShowForm(const struct  Form* ps);//删除指定的学生成绩
void DelForm(struct  Form* ps);//查找指定人的信息
void SearchForm(const struct  Form* ps);//修改指定学生信息
void ModifyForm(struct Form* ps);//按成绩排序内容
void SortscoreForm(struct  Form* ps);//按学号排序内容
void SortidForm(struct  Form* ps);//返回最高分同学信息
void BestForm(struct Form* ps);//返回最低分同学信息
void WorstForm(struct Form* ps);//返回所有同学的平均成绩
void AveForm(struct Form* ps);//判断指定同学的成绩是否为素数
void PrimeForm(struct Form* ps);// 判断指定俩位同学的成绩是否互素
void CoprimeForm(struct Form* ps);void menu()
{printf("Okay, data upload finished. What do you what to do next? You can enter a number to tell me.\n");printf("1.添加一位同学信息\n");printf("2.添加多位同学信息\n");printf("3.删除一位同学信息\n");printf("4.查找同学信息\n");printf("5.按学号排序内容\n");printf("6.按成绩排序内容\n");printf("7.最高分\n");printf("8.最低分\n");printf("9.判断指定同学的成绩是否为素数\n");printf("10.判断指定俩位同学的成绩是否互素\n");printf("11.修改同学信息\n");printf("12.平均数\n");printf("13.打印表格\n");printf("0.退出\n");
}
int main()
{printf("Hello, pls input a series of student information!\n");int input = 0;//创建通讯录struct  Form form;//form就是表格,里面包含:MAX个元素和size  //初始化通讯录InitForm(&form);do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case ADD:AddForm(&form);Rinking(&form);break;case ADDS:AddsForm(&form);Rinking(&form);break;case DEL:DelForm(&form);Rinking(&form);break;case SEARCH:SearchForm(&form);break;case SORTSORCE:SortscoreForm(&form);break;case SORTID:SortidForm(&form);break;case BEST:BestForm(&form);break;case WORST:WorstForm(&form);break;case AVE:AveForm(&form);break;case PRIME:PrimeForm(&form);break;case COPRIME:CoprimeForm(&form);break;case MODIFY:ModifyForm(&form);Rinking(&form);break;case SHOW:ShowForm(&form);break;case EXIT:printf("退出查询\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}//辅助函数
static int FindByName(const struct Form* ps, char name[MAX_NAME])
{int i = 0;for (i = 0; i < ps->size; i++){if (0 == strcmp(ps->data[i].name, name)){return i;}}return -1;//找不到的情况
}//取较小值
int MIN(int x, int y)
{if (x > y){return y;}else{return x;}
}
void InitForm(struct Form* ps)
{memset(ps->data, 0, sizeof(ps->data));ps->size = 0;//设置表格最初只有0个元素
}void Rinking(struct Form* ps)
{int arr[200]={0};int i = 0;for ( i = 0; i<=ps->size; i++){arr[i] = ps->data[i].grade;}for (int j = 0; j <i; j++){for (int k = 0; k + 1 < i; k++){if (arr[k]< arr[k+1]){int tmp;tmp = arr[k];arr[k] = arr[k + 1];arr[k + 1] = tmp;}}}for (int j = 0; j < i; j++){for (int k = 0; k <= i; k++){if (ps->data[j].grade == arr[k]){ps->data[j].rinking = k+1;break;}}}
}void AddForm(struct Form* ps)
{if (ps->size == MAX){printf("表格已满,无法增加\n");}else{printf("请输入名字:>");scanf("%*[\n]%[^\n]", ps->data[ps->size].name);printf("请输入成绩:>");scanf("%d", &(ps->data[ps->size].grade));printf("请输入学号:>");scanf("%s", ps->data[ps->size].num);if (ps->data[ps->size].grade >= 93){//ps->data[ps->size].GPA[0] = "A+";strcpy(ps->data[ps->size].GPA, "A+");}else if (ps->data[ps->size].grade < 93 && ps->data[ps->size].grade >= 85){//ps->data[ps->size].GPA[0] = "A";strcpy(ps->data[ps->size].GPA, "A");}else if (ps->data[ps->size].grade < 85 && ps->data[ps->size].grade >= 80){//ps->data[ps->size].GPA[0] = "B+";strcpy(ps->data[ps->size].GPA, "B+");}else if (ps->data[ps->size].grade < 80 && ps->data[ps->size].grade >= 75){//ps->data[ps->size].GPA[0] = "B";strcpy(ps->data[ps->size].GPA, "B");}else if (ps->data[ps->size].grade < 75 && ps->data[ps->size].grade >= 70){//ps->data[ps->size].GPA[0] = "B";strcpy(ps->data[ps->size].GPA, "C+");}else if (ps->data[ps->size].grade < 70 && ps->data[ps->size].grade >= 65){//ps->data[ps->size].GPA[0] = "C";strcpy(ps->data[ps->size].GPA, "C");}else if (ps->data[ps->size].grade < 65 && ps->data[ps->size].grade >= 60){//ps->data[ps->size].GPA[0] = "C";strcpy(ps->data[ps->size].GPA, "D");}else if (ps->data[ps->size].grade < 60){//ps->data[ps->size].GPA[0] = "D";strcpy(ps->data[ps->size].GPA, "F");}if (ps->data[ps->size].num[0] == '2' && ps->data[ps->size].num[1] == '0' && ps->data[ps->size].num[2] == '2' && ps->data[ps->size].num[3] == '1'){//ps->data[ps->size].rebuild[0] = "NO";strcpy(ps->data[ps->size].rebuild, "NO");}else{//ps->data[ps->size].rebuild[0] = "YES";strcpy(ps->data[ps->size].rebuild, "YES");}ps->size++;printf("添加成功\n");}
}void AddsForm(struct Form* ps)
{int n;printf("请输入要存储的学生信息个数:>");scanf("%d", &n);for (int i = 0; i < n; i++){if (ps->size == MAX){printf("表格已满,无法增加\n");}else{printf("请输入第%d个同学的信息", i+1);printf("请输入名字:>");scanf("%*[\n]%[^\n]", ps->data[ps->size].name);printf("请输入成绩:>");scanf("%d", &(ps->data[ps->size].grade));printf("请输入学号:>");scanf("%s", ps->data[ps->size].num);if (ps->data[ps->size].grade >= 93){//ps->data[ps->size].GPA[0] = "A+";strcpy(ps->data[ps->size].GPA, "A+");}else if (ps->data[ps->size].grade < 93 && ps->data[ps->size].grade >= 85){//ps->data[ps->size].GPA[0] = "A";strcpy(ps->data[ps->size].GPA, "A");}else if (ps->data[ps->size].grade < 85 && ps->data[ps->size].grade >= 80){//ps->data[ps->size].GPA[0] = "B+";strcpy(ps->data[ps->size].GPA, "B+");}else if (ps->data[ps->size].grade < 80 && ps->data[ps->size].grade >= 75){//ps->data[ps->size].GPA[0] = "B";strcpy(ps->data[ps->size].GPA, "B");}else if (ps->data[ps->size].grade < 75 && ps->data[ps->size].grade >= 70){//ps->data[ps->size].GPA[0] = "B";strcpy(ps->data[ps->size].GPA, "C+");}else if (ps->data[ps->size].grade < 70 && ps->data[ps->size].grade >= 65){//ps->data[ps->size].GPA[0] = "C";strcpy(ps->data[ps->size].GPA, "C");}else if (ps->data[ps->size].grade < 65 && ps->data[ps->size].grade >= 60){//ps->data[ps->size].GPA[0] = "C";strcpy(ps->data[ps->size].GPA, "D");}else if (ps->data[ps->size].grade < 60){//ps->data[ps->size].GPA[0] = "D";strcpy(ps->data[ps->size].GPA, "F");}if (ps->data[ps->size].num[0] == '2' && ps->data[ps->size].num[1] == '0' && ps->data[ps->size].num[2] == '2' && ps->data[ps->size].num[3] == '1'){//ps->data[ps->size].rebuild[0] = "NO";strcpy(ps->data[ps->size].rebuild, "NO");}else{//ps->data[ps->size].rebuild[0] = "YES";strcpy(ps->data[ps->size].rebuild, "YES");}ps->size++;}}printf("添加成功\n");
}void ShowForm(const struct Form* ps)
{if (ps->size == 0){printf("表格为空\n");}else{int i = 0;//标题printf("%-20s\t%-3s\t%-20s\t%-15s\t%-15s\t%-5s\n", "名字", "成绩", "学号","重修信息","GPA","排名");//数据for (i = 0; i < ps->size; i++){printf("%-20s\t%-3d\t%-20s\t%-15s\t%-15s\t%-5d\n",ps->data[i].name,ps->data[i].grade,ps->data[i].num,ps->data[i].rebuild,ps->data[i].GPA,ps->data[i].rinking);}}
}void DelForm(struct Form* ps)
{char name[MAX_NAME];printf("请输入要删除人的名字:>");scanf("%*[\n]%[^\n]", name);//1.查找要删除的人在什么位置//找到了返回名字所在元素的下标//找不到返回-1int pos = FindByName(ps, name);//2.删除if (pos == -1){printf("要删除的人不存在\n");}else{//删除数据int j = 0;for (j = pos; j < ps->size - 1; j++){ps->data[j] = ps->data[j + 1];}ps->size--;printf("删除成功\n");}
}void SearchForm(const struct Form* ps)
{char num[MAX_NUM];printf("请输入要查找的学号:>");scanf("%s", num);int pos = FindByName(ps, num);if (pos == -1){printf("要查找的人不存在\n");}else{printf("%-20s\t%-3s\t%-12s\n", "名字", "成绩", "学号");printf("%-20s\t%-3d\t%-12s\n",ps->data[pos].name,ps->data[pos].grade,ps->data[pos].num);}
}void ModifyForm(struct Form* ps)
{char num[MAX_NUM];printf("请输入要修改人的学号:>");scanf("%s", num);int pos = FindByName(ps, num);if (pos == -1){printf("要修改的人不存在\n");}else{printf("请输入名字:>");scanf("%s", ps->data[pos].name);printf("请输入成绩:>");scanf("%d", &(ps->data[pos].grade));printf("请输入学号:>");scanf("%s", ps->data[pos].num);printf("修改完成\n");}
}void SortscoreForm(struct Form* ps)
{int i = 0;for (i = 0; i < ps->size; i++){for (int j = 0; j + 1 < ps->size; j++){if (ps->data[j].grade < ps->data[j + 1].grade){struct PeoInfo tmp;tmp = ps->data[j];ps->data[j] = ps->data[j + 1];ps->data[j + 1] = tmp;}}}printf("排序成功\n");
}void SortidForm(struct  Form* ps)
{int i = 0;for (i = 0; i < ps->size; i++){for (int j = 0; j + 1 < ps->size; j++){for (int k = 0; k < 12; k++){if (ps->data[j].num[k] > ps->data[j + 1].num[k]){struct PeoInfo tmp;tmp = ps->data[j];ps->data[j] = ps->data[j + 1];ps->data[j + 1] = tmp;break;}}}}printf("排序成功\n");
}void BestForm(struct Form* ps)
{int max = 0;for (int i = 0; i < ps->size; i++){if (ps->data[i].grade > max){max = ps->data[i].grade;}}printf("%-20s\t%-3s\t%-20s\t%-15s\t%-15s\t%-5s\n", "名字", "成绩", "学号", "重修信息", "GPA", "排名");for (int i = 0; i < ps->size; i++){if (ps->data[i].grade == max){printf("%-20s\t%-3d\t%-20s\t%-15s\t%-15s\t%-5d\n",ps->data[i].name,ps->data[i].grade,ps->data[i].num,ps->data[i].rebuild,ps->data[i].GPA,ps->data[i].rinking);}}
}void WorstForm(struct Form* ps)
{int min = 100;for (int i = 0; i < ps->size; i++){if (ps->data[i].grade < min){min = ps->data[i].grade;}}printf("%-20s\t%-3s\t%-5s\n", "名字", "成绩", "学号");for (int i = 0; i < ps->size; i++){if (ps->data[i].grade == min){printf("%-20s\t%-3d\t%-12s\n",ps->data[i].name,ps->data[i].grade,ps->data[i].num);}}
}void PrimeForm(struct Form* ps)
{char num[MAX_NUM];printf("请输入要查找人的学号:>");scanf("%s", num);int pos = FindByName(ps, num);if (pos == -1){printf("要查找的人不存在\n");}else{int flag = 0;for (int i = 2; i < ps->data[pos].grade; i++){if (ps->data[pos].grade % i == 0){flag = 1;break;}}if (flag == 1){printf("该同学的成绩不是素数\n");}else{printf("该同学的成绩是素数\n");}}
}void CoprimeForm(struct Form* ps)
{char num1[MAX_NUM];char num2[MAX_NUM];printf("请输入要查找的第一位同学的学号:>");scanf("%s", num1);int pos1 = FindByName(ps, num1);printf("请输入要查找的另一位同学的学号:>");scanf("%s", num2);int pos2 = FindByName(ps, num2);if (pos1 == -1){printf("要查找的人不存在\n");}else if (pos2 == -1){printf("要查找的人不存在\n");}else{int flag = 0;for (int i = 2; i < MIN(ps->data[pos1].grade,ps->data[pos2].grade); i++){if (ps->data[pos1].grade % i == 0&& ps->data[pos2].grade % i == 0){flag = 1;break;}}if (flag == 1){printf("该俩位同学的成绩不互素\n");}else{printf("该俩位同学的成绩互素\\n");}}
}void AveForm(struct Form* ps)
{int sum = 0;for (int i = 0; i < ps->size; i++){sum += ps->data[i].grade;}printf("平均数为%d\n", sum / ps->size);
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部