Online Judge PTA 修改学生信息

修改学生信息

描述

请设计一个简单的学生成绩管理系统,要求系统实现以下功能: 

插入学生信息: Insert id name sex year month day x y z, 其中的参数分别为学号、姓名、性别、
出生日期(年、月、日)、三门课的成绩,成绩为浮点数。
 
按输入顺序输出学生信息    List 

查找学生信息: Find id 查找学号为id的学生信息。

Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 
把学号为id的学生信息修改为
newname,newsex,newyear,newmonth,newday,newx,newy,newz(学号保持不变) 

退出程序: Quit或者Exit

请注意:姓名的长度不超过20。

输入

输入有多行,每行一条指令,指令格式如下:
Insert id name sex year month day x y z,其中的参数分别为学号、姓名、性别、
出生日期(年、月、日)三门课的成绩,成绩为浮点数。

List       按输入顺序输出所有学生信息。

Find id  查找学号为 id 的学生信息。

Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz
把学号为id的学生信息修改为newname,newsex,newyear,newmonth,newday,newx,newy,newz(学号保持不变) 

Quit或者Exit  输出"Good bye!"后结束程序。

输出

输出有多行,对应命令的输出如下:
Insert id name sex year month day x y z 插入后在单独的一行中输出"Insert:",
如果链表中不存在相同学号的学生信息,在第二行中显示学生信息,
格式: id name sex year month day x y z ave sum,分别为学号、姓名、性别、
出生日期(年、月、日)和三门课(语文、数学、英语)的成绩,平均成绩和总成绩,
数据之间用一个空格分开,成绩保留1位小数。 否则,输出"Failed" 

List  输出"List:"后,按输入顺序输出所有学生的信息,
格式与插入学生信息后输出的格式相同。 

Find id 第一行显示”Find:",第二行显示格式如下: 
如果找到学号为id的学生,则在单独一行中显示学生信息,格式如List。
否则在单独一行显示"Failed"。 

Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 
第一行显示"Change:"。如果链表中不存在学号为id的学生,显示"Failed"。
否则修改该学生信息并在单独一行中显示该生信息,显示格式如List命令。

Quit或者Exit  在单独一行中输出"Good bye!"后结束程序。

输入样例 1 

Insert 0911001 zhangsan F 1992 3 24 87 78 65
Insert 0911003 Lisi F 1992 5 3 77 72 55
Insert 0911002 zhaoliu F 1993 8 8 97 90 55
List
Insert 0911001 zhangou M 1992 3 24 98 78 65
Change 0911002 zhaoliu M 1990 9 9 90 91 92
Change 0911005 zhaoliu M 1990 9 9 90 91 92
Insert 0911005 Wangrong F 1990 12 12 68 56 100
Find 0911002
Insert 0911004 Wangwu F 1991 9 2 68 56 95
List
Quit

输出样例 1

Insert:
0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
Insert:
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
Insert:
0911002 zhaoliu F 1993 8 8 97.0 90.0 55.0 80.7 242.0
List:
0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
0911002 zhaoliu F 1993 8 8 97.0 90.0 55.0 80.7 242.0
Insert:
Failed
Change:
0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
Change:
Failed
Insert:
0911005 Wangrong F 1990 12 12 68.0 56.0 100.0 74.7 224.0
Find:
0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
Insert:
0911004 Wangwu F 1991 9 2 68.0 56.0 95.0 73.0 219.0
List:
0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
0911005 Wangrong F 1990 12 12 68.0 56.0 100.0 74.7 224.0
0911004 Wangwu F 1991 9 2 68.0 56.0 95.0 73.0 219.0
Good bye!
#include<bits/stdc++.h>
using namespace std;

const int N = 1010;
struct student
{
	string id, name, sex;
	int year, month, day;
	double x, y, z, ave, sum; 
}stu[N];
void input(student &s)
{
	cin >> s.id >> s.name >> s.sex;
	cin >> s.year >> s.month >> s.day;
	cin >> s.x >> s.y >> s.z;
	s.sum = s.x + s.y + s.z;
	s.ave = s.sum / 3;
}
void outputsingle(student s)
{
	cout << s.id << " " << s.name << " " << s.sex << " " ;
	printf("%d %d %d ", s.year, s.month, s.day);
	printf("%.1f %.1f %.1f ", s.x, s.y, s.z);
	printf("%.1f %.1f\n", s.ave, s.sum);
}
void outputArray(student stu[],int n)
{
	for(int i = 0; i < n; i ++) outputsingle(stu[i]);
}
int find(student stu[], int n, string id)
{
	for(int i = 0; i < n; i ++)
		if(stu[i].id == id)
			return i;
	return -1;
}
int main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
	string order;
	student s;
	int n = 0;
	while(true)	
	{
		cin >> order;
		if(order == "Insert")
		{
			input(s);

			
			puts("Insert:");
			int idx = find(stu, n, s.id);
			if(idx == -1)
			{
				stu[n ++] = s;
				outputsingle(s);
			}
			else puts("Failed");	
		}
		else if(order == "List")
		{
			puts("List:");
			outputArray(stu,n);
		}
		else if(order == "Find")
		{
			string id;
			cin >> id;
			puts("Find:");
			int idx = find(stu,n , id);
			if(idx == -1) puts("Failed");
			else outputsingle(stu[idx]); 
		}
		else if(order == "Change")
		{
			input(s);
			puts("Change:");
			int idx = find(stu, n, s.id);
			if(idx == -1) puts("Failed");
			else 
			{
				stu[idx] = s;
				outputsingle(s);
			}
		}
		else if(order == "Quit" || order == "Exit")
		{
			puts("Good bye!");
			break;
		}
	}
	return 0;
 }

如有侵权,联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flocx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值