C/C++编程学习 - 第8周 ⑥ 程序设计:成绩查询系统

题目链接

题目描述

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

  1. insert [name] [score],向系统中插入一条信息,表示名字为name的学生的数学成绩为score。
  2. find [name],表示查找名字为name的学生的数学成绩。
    注意有些同学可能会为了刷分多次选课,查询的时候给出最大成绩即可。学生的名字是由小写字母组成。成绩是一个 0…100 的整数。

老师找到你,想你帮他完成这个系统。

输入格式
输入若干行,每行都是insert [name] [score]或者find [name]的形式,或一行end表示输入结束。输入行数不大于 1000,每个学生名字长度不大于 20 个字符。

输出格式
对于每个查询,输出查询的学生的最高成绩,如果系统中不存在该学生,输出 −1。

Sample Input

insert zhangsan 90
insert lisi 78
insert xiaoming 86
find xiaoming
find jack
end

Sample Output

86
-1

思路

使用结构体保存学生的信息,比较字符串是"insert"还是"find"来决定是进行插入操作还是进行查询操作。

C++代码:

#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
    char name[20];
    int score;
    struct Node *next;
}Node, *List;
int Init_L(List &L)
{
    L = (List)malloc(sizeof(Node));
    if(!L)
        return 0;
    L -> next = NULL;
    return 0;
}
bool complare(int a,int b)
{
    return a > b;
}
int main()
{
    List L;
    Init_L(L);
    string operate;
    string name;
    List r, p;   
    r = L;      
    while(cin >> operate)
	{
        if(operate == "end")
            break;
        else if(operate == "insert")
		{
            char nam[20];
            int sco;
            p = (List)malloc(sizeof(Node));
            cin >> nam >> sco;
            strcpy(p -> name ,nam);
            p -> score = sco;
            r -> next = p;   
            r = p;    
            r -> next = NULL;
        }
        else if(operate == "find")
		{
            cin >> name;
            List x;    
            x = L -> next;
            int sign = 0, array[10] = {0}, i = 0, max = 0;
            while(x)
			{
                if(name == x -> name)
				{
                    array[i] = x -> score;
                    if(max < array[i]) max = array[i];
                    i++;
                    sign = 1;
                }
                x = x -> next;
            }
            if(sign == 1) cout << max << endl;
            if(sign == 0) cout << "-1" << endl;
        }
    }
    return 0;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++学生成绩管理系统设计源码+设计文档资料。 1. 功能模块与界面 (1)教师,学生登录 (2)学生显示自己的全部信息 (3)教师选择功能:课程管理,成绩录入,成绩查询成绩修改,成绩删除,学生管理。 (4)课程管理中可以添加,修改,删除课程 (5)成绩录入可以选择课程,然后选择成绩文件录入成绩。 (6)成绩修改可以输入学生的学号和成绩进行修改。 (7)成绩查询可以选择通过学号,姓名,课程等进行查询。 (8)成绩删除可以输入学号和课程删除相应成绩。 (9)学生管理选择添加,修改和删除学生。(添加学生:输入新学生的信息,修改学生:输入需修改得学生学号,然后输入新的信息,删除学生:输入需要删除的学生学号) ⼆.关键设计思路或⽅法 1.成绩的数据结构 class Score{ string StdentNO; string ClassName; int score; Score* head; //指向头 Score* next; //指向下⼀个 public : friend class User; Score( string,string); Score( string,string,int); int getScore(); void changeScore(int);//输⼊课程和分数修改成绩 }; 对于成绩采⽤Score类来进⾏表⽰。⼀个Score对象相当于⽤户成绩链的⼀个节点。Score 中包括了学⽣的学号,课程名称以及该⻔课程的成绩。*next指向下⼀个成绩节点,*head指向第 ⼀个成绩节点。值得说明的是,这个链路将在⽤户初始化的时候构建,学⽣学号由⽤户的构造函 数传⼊,课程和成绩由Score的构造函数从数据库中取得。此外最后⼀个节点的*next将指向第⼀ 个节点。也就是说,⽤户的成绩链被设计成是环形的,以便其他函数的操作。 2.⽤户类 class User{ int UserType; //1⽼师,2本科⽣,3研究⽣,4博⼠⽣,0未定 string StudentNo; //学号 string sname;//姓名 string spassword;//密码 Score* sscore; //分数 Score* sstail; //分数 public: 学⽣成绩管理系统 Page 3 User():UserType(0),StudentNo("暂⽆"),sname("暂⽆"),spassword("暂⽆ "),sscore(nullptr),sstail(nullptr){} User(string); ~User(); void setUser(string); int getUserType() const; string getStudentNo() const; string getName() const; string getPassword() const; Score* getScore() const; void showInfo(); void cStudentNo(string); void cSName(string); void cSPassword(string); void cSScore(string,int); }; ⽤户类中UserType被⽤来表⽰这个⽤户是教师,本科⽣,研究⽣还是博⼠⽣。其中教师拥 有管理权限。包括UserType在内,StudentNo(学号),sname(姓名),spassword(密码) 和Score(成绩)都将在User(string)这个构造函数中从数据库中取得。此外在添加⽤户的时候, 使⽤User()构造函数,以上⼏个的内容将会以0,”暂⽆”或nullptr来代替。 3.Admin类 Admin类中包括了管理员常⽤的操作。包括成绩录⼊,检查登录信息,添加⽤户等 等操作。 学⽣成绩管理系统 Page 4 三.详细设计 1.源代码⽂件结构及类的构成 如图 (1)main函数:相当于整个程序的Controlle

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水蛙菌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值