#include <stdio.h>
struct id {
int ca;//操作类型
char name[36];//姓名
long long ID;
int sc1;//数学
int sc2;//英语
int sc3;//计算机
};
int add(struct id *ptr[], int i, struct id a[], struct id b[], int c);
//添加信息操作
void del(struct id *ptr[], int i, struct id a[], struct id b[], int c);
//删除信息操作
void readd(struct id *ptr[], int i, struct id a[], struct id b[], int c);
//重写信息操作
void print(struct id *ptr[], int i, struct id a[], struct id b[], int c);
//打印信息操作
int main() {
struct id a[300];
struct id b[300];
int n;
b[299].ID = -1;
scanf("%d", &n);
struct id *ptr[300];
//录入输入
for (int i = 0; i < n; i++) {
scanf("%d", &a[i].ca);
if (a[i].ca == 1) {
scanf("%lld", &a[i].ID);
scanf("%s", a[i].name);
scanf("%d", &a[i].sc1);
scanf("%d", &a[i].sc2);
scanf("%d", &a[i].sc3);
}
if (a[i].ca == 2 || a[i].ca == 4) {
scanf("%lld", &a[i].ID);
}
if (a[i].ca == 3) {
scanf("%lld", &a[i].ID);
scanf("%d", &a[i].sc1);
scanf("%d", &a[i].sc2);
scanf("%d", &a[i].sc3);
}
}
int c = 0;//记录成功写入的次数
for (int i = 0; i < n; i++) {
if (a[i].ca == 1) {
c = add(ptr, i, a, b, c);
}
if (a[i].ca == 2) {
del(ptr, i, a, b, c);
}
if (a[i].ca == 3) {
readd(ptr, i, a, b, c);
}
if (a[i].ca == 4) {
print(ptr, i, a, b, c);
}
}
return 0;
}
int add(struct id *ptr[], int i, struct id a[], struct id b[], int c) {
int f = 1;
for (int j = 0; j < c; j++) {
if (ptr[j]->ID == a[i].ID) {
f = 0;
}
}
if (f == 1) {
ptr[c] = &b[c];
b[c] = a[i];
printf("Add success\n");
c++;
}
if (f == 0) {
printf("Students already exist\n");
}
return c;
}
void del(struct id *ptr[], int i, struct id a[], struct id b[], int c) {
int f = 1;
for (int j = 0; j < c; j++) {
if (ptr[j]->ID == a[i].ID) {
ptr[j] = &b[299];//不是真的删除,而是指向一个不可能存在的数据,使其条件不成立,执行结果和删除一样(不是一个好方法)
f = 0;
}
}
if (f == 0) {
printf("Delete success\n");
}
if (f == 1) {
printf("Students do not exist\n");
}
}
void readd(struct id *ptr[], int i, struct id a[], struct id b[], int c) {
int f = 1;
for (int j = 0; j < c; j++) {
if (ptr[j]->ID == a[i].ID) {
ptr[j]->sc1 = a[i].sc1;
ptr[j]->sc2 = a[i].sc2;
ptr[j]->sc3 = a[i].sc3;
f = 0;
}
}
if (f == 0) {
printf("Update success\n");
}
if (f == 1) {
printf("Students do not exist\n");
}
}
void print(struct id *ptr[], int i, struct id a[], struct id b[], int c) {
int f = 1, m;
double ave;
for (int j = 0; j < c; j++) {
if (ptr[j]->ID == a[i].ID) {
f = 0;
m = j;
}
}
if (f == 1) {
printf("Students do not exist\n");
}
if (f == 0) {
printf("Student ID:%lld\n", ptr[m]->ID);
printf("Name:");
puts(ptr[m]->name);
ave = ((double) ptr[m]->sc1 + (double) ptr[m]->sc2 + (double) ptr[m]->sc3) / 3;
printf("Average Score:%.1lf\n", ave);
}
}
创建学生信息管理系统,具体要求如下:
学生信息包括:学号 姓名 数学成绩 英语成绩 计算机成绩
功能1:添加学生信息 执行1时,输入学号,姓名,三门科目成绩;如果添加学生成功则输出“Add success”,如果学生已存在则输出“Students already exist”
功能2:删除学生信息 执行2时,输入学号信息;如果学生不存在,输出“Students do not exist”,如果存在,则输出“Delete success”
功能3:更改学生成绩信息 执行3时,输入学号信息;如果学生不存在,输出“Students do not exist”,如果存在,输出“Update success”
功能4:显示学生平均分成绩 执行4时,输入学号信息;如果学生不存在,输出“Students do not exist”,如果存在,则输出学生信息,如下格式:
Student ID:2019989890
Name:Jerry
Average Score:89.3
其中平均分为三门科目相加除以3,保留一位小数,每行之间换行。
输入格式:
第一行为一个整数n(0<n<130),后边共n行,每一行表示执行一种功能。其中1,2,3,4分别对应执行上面4种功能,具体格式见输入样例。 测试用例保证:学号和名字均为长度不超过10的字符串,各门课成绩为0到100之间的整数。
输出格式:
输入样例:
8
1 201817123 Tom 89 80 76
1 2019989890 Jerry 78 99 67
4 201817123
2 201817123
4 201817123
4 2019989890
3 2019989890 79 90 99
4 2019989890
输出样例:
Add success
Add success
Student ID:201817123
Name:Tom
Average Score:81.7
Delete success
Students do not exist
Student ID:2019989890
Name:Jerry
Average Score:81.3
Update success
Student ID:2019989890
Name:Jerry
Average Score:89.3