• C语言 · 成绩查询系统


    抱歉,昨天忘了往博客上更新,今天补上。

    成绩查询系统

    分值: 21

    数学老师小y 想写一个成绩查询系统,包含如下指令:

    1. insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
    2. 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 }
  • 相关阅读:
    TensorFlow(五):手写数字识别加强版
    TensorFlow(四):手写数字识别
    TensorFlow(三):非线性回归
    Apache+php搭建
    PHP基础知识(1)
    mysql8.0.11安装
    ffmpeg-20160517-git-bin-v2
    ffmpeg-20160517-git-bin
    Node.js 字体格式转换 ttf2eot ttf2woff ttf2svg
    ffmpeg-20160515-git-bin
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6661952.html
Copyright © 2020-2023  润新知