- 一、项目1:计算机设计大赛赛事统计
- 1.问题描述
- 2.实验分析
- 3.实验设计
- 二、项目2:校园导游咨询
- 1.问题描述
- 2.实验分析
- 3.实验设计
- 三、项目3:算术表达式求解
- 1.问题描述
- 2.实验分析
- 3.实验设计
参加计算机设计大赛的n个学校编号为1到n。赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表。符合以下基本和设计要求:
1)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2)能统计各学校的总分;
3)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5)数据存入文件并能随时查询
6)每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
7)能统计各学校的总分;
8)可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
9)可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得 前三名的学校;
10)数据存入文件并能随时查询
【数据结构课设第一题补充】
为大家测试时,设计的数据逻辑统一,做以下约束:
每个学校的每个参赛队伍只能参加一个赛事项目
设计一个校园导游程序,为来访的客人提供各种信息查询服务。符合要求:
(1) 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。
(2) 为来访客人提供图中任意景点相关信息的查询。
(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
设计一个简单的算术表达式计算器。符合要求: 实现标准整数类型的四则运算表达式的求值(包含括号,可多层嵌入).
【测试数据】
(30+270)/3-123
5+(9*(62-37)+15)*6
要求自行设计非法表达式,进行程序测试,以保证程序的稳定运行。
1)首先能完成包含可多层嵌入的括号的四则运算
2)对于非法表达式,可以保证程序的稳定。对于非法表达式,可以使其无法运行,意识到表达式非法,然后进行整补。
计算器上带括号的四则运算实际上利用的是栈后进先出的原则
1.首先需要存储操作数和运算符
stacknumbers; stack operations;
2.设定运算符的优先级,其中以’#'作为operations的栈底元素
int priority(char operate) {
switch (operate) {
case '#':case 'n': return 0;
case '(':case ')': return 1;
case '+':case '-': return 2;
case '*':case '/': return 3;
}
}
3.通过栈和运算符优先级等编写函数
void calculate(char command) {
double num, leftNum, rightNum, result;
switch (command) {
case '0':case'1':case '2':case'3':case '4':case'5':case '6':case'7':case '8':case'9':
cin.putback(command);
cin >> num;
numbers.push(num);
break;
case '(':case ')':case '+':case '-':case '*':case '/':case 'n':
if (operations.empty())
operations.push('#');
if (priority(command) > priority(operations.top()) || command == '(')
operations.push(command);
else {
while (priority(command) <= priority(operations.top())) {
if (operations.top() == '#' && command == 'n') {
result = numbers.top();
cout << "答案为 " << result << endl << endl;
numbers.pop();
operations.pop();
break;
}
else if (operations.top() == '(' && command == ')') {
operations.pop();
cin >> command;
}
else {
rightNum = numbers.top();
numbers.pop();
leftNum = numbers.top();
numbers.pop();
switch (operations.top()) {
case '+': numbers.push(leftNum + rightNum);
operations.pop();
break;
case '-': numbers.push(leftNum - rightNum);
operations.pop();
break;
case '*': numbers.push(leftNum * rightNum);
operations.pop();
break;
case '/': numbers.push(leftNum / rightNum);
operations.pop();
break;
}
}
}
if (command != 'n')
operations.push(command);
}
break;
}
}
4.管理系统界面



