C语言 · 成绩查询系统
抱歉,昨天忘了往博客上更新,今天补上。
成绩查询系统
分值: 21
数学老师小y 想写一个成绩查询系统,包含如下指令:
- insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
- find [name],表示查找名字为name的学生的数学成绩。
注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…100 的整数。
老师找到你,想你帮他完成这个系统。
输入格式
输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 1000,每个学生名字长度不大于 20 个字符。
输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 −1。
样例输入
insert zhangsan 90
insert lisi 78
insert xiaoming 86
find xiaoming
find jack
end
样例输出
86
-1
作者注释:本人能力有限,用纯C写的有bug,整std写了一个,仅供参考。
对了,代码功能添加了一个查询所有记录的功能,删掉即符合题意了。
1 #include<stdio.h> 2 #include<vector> 3 #include<string> 4 #include<iostream> 5 #include<math.h> 6 using namespace std; 7 struct info{ 8 string name; 9 int score; 10 }stu; 11 /* 12 定义find函数: 13 功能:在容器中按姓名查找是否有相同姓名的记录; 14 参数:结构体类型的容器,字符串类型的姓名; 15 返回值类型:指向某条数据的指针。 16 */ 17 vector<info>::iterator find(vector<info>&stu,string name){ 18 vector<info>::iterator it;//声明迭代器 19 for(it=stu.begin();it!=stu.end();it++){ 20 if(it->name==name) 21 break; 22 } 23 return it;//返回的是指向某条数据的指针 24 } 25 int main(){ 26 string sign,name; 27 int score; 28 vector<info> inf;//声明结构体类型的容器,用来存放数据 29 cin>>sign;//录入操作符 30 vector<info>::iterator it;//声明迭代器 31 while(sign!="end"){ 32 if(sign=="insert"){ 33 cin>>stu.name>>stu.score;//录入 34 it = find(inf,stu.name);//调用函数 35 if(it==inf.end()){ 36 inf.push_back(stu); 37 }else if(it->score<stu.score){//若刚刚输入的成绩大于已存的成绩 38 inf.insert(it,stu);//存放分数高的记录 39 }else{//没有找到,新存一条记录 40 inf.insert(it+1,stu); 41 } 42 } 43 else if(sign=="find"){ 44 cin>>stu.name;//录入 45 it=find(inf,stu.name);//调用函数 46 cout<<it->score<<endl; 47 } 48 else if(sign=="all"){ 49 for(it=inf.begin();it!=inf.end();it++){ 50 cout<<it->name<<" "<<it->score<<endl; 51 } 52 } 53 cin>>sign;//执行完一遍操作,进入下一遍 54 } 55 return 0; 56 }
此题学到一个处理出入输出的技巧:用while来做判断。
如题中while(sign!="end"){······}。
补:今天有人提到此题,用map写:
1 #include<map> 2 #include<math.h> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 map<string,int> m; 7 string sign,name; 8 int score; 9 while(1){ 10 cin>>sign; 11 if(sign=="end"){ 12 break; 13 } 14 else if(sign=="insert"){ 15 cin>>name>>score; 16 if(score>m[name]){ 17 m[name] = score; 18 } 19 } 20 else if(sign=="find"){ 21 cin>>name; 22 if(m[name]==0){ 23 cout<<"-1"<<endl; 24 }else{ 25 cout<<m[name]<<endl; 26 } 27 } 28 } 29 return 0; 30 }