急求代码! 高手中的高手请进!!!帮我!!!!!!!!!!谢谢你^_^

kykang2008 2009-06-20 11:12:26
一、题目:设计考场的编排,生成准考证号
二、目的与要求
1. 目的
培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。
2. 基本要求
(1) 用C++语言编程,在Visual C++环境下调试完成;
(2) 使用结构数组,各个功能分别使用函数来完成。
三、设计方法和基本原理
1.课题功能描述
本程序要求根据考生人数、考场个数和每个考场的人数,为考生生成准考证号,并显示生成的考生信息。
2. 问题详细描述
根据考生的报名信息、考场数和每个考场容纳的人数,来编排考生的准考证号。已知准考证号(字符串)依次由由考场号(2位)、学校代码(2位)、考生学号的前两位(2位)、座位号(2位)共8位组成,其中学校代码已给定(const int CODE = 18)。已知,每个考生的信息包括学号(int num)、姓名(char name[20])和准考证号(char testID[8])。要求编写多个函数分别实现下列功能,而后在main函数中进行调用。
(1) 录入考生的报名信息,即学号和姓名。
(2) 根据用户输入考生人数,每个考场容纳的人数,生成准考考号。例如:若某考生的学号为99764,考场号为2,座位号为5,学校代码为18,则该考生的准考证号为:”02189905”,注意当考场号和座位号小与10时,前面加0。
(3) 显示全部考生的考试信息,如输出考生的学号、姓名、准考证号、考场号和座位号。
(4) 按考场号分别显示考生信息。 &nbs p; &nbs p; &nbs p; &nbs p; &nbs p; &nbs p; &nbs p; &nbs p; &nbs p;
3. 问题的解决方案
(1) 采用结构体类型存储学生信息。
(2) 使用字符型数组存储准考证号,因此要将考场号、学校代码、考生学号、座位号分别转换为字符型数据进行存储。
(3) 考场号和座位号的编排与总人数和每个考场的人数有关。
四、主要技术问题的描述
分别编写函数实现编排考场号、学校代码转换、取学号前两位、编排座位号、显示信息,形参为结构数组,在上述函数中分别将转换的结果分别存放到testID成员(准考证号,字符数组)中相应的数组元素中。
五、创新要求
在基本要求达到后,进行创新设计:
(1)使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明。
(2)对程序功能进行拓展,使其更加实用。例如,按照随机数编排座位号等
...全文
54 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zizhuchuangxin 2009-06-21
  • 打赏
  • 举报
回复
发帖不到6分钟就搞定了,2楼实在是太强大了
komfanter 2009-06-21
  • 打赏
  • 举报
回复
六分钟,厉害,可是不能运行啊
edwinlxming 2009-06-21
  • 打赏
  • 举报
回复
学习了 厉害
xia2009613 2009-06-21
  • 打赏
  • 举报
回复
看到牛人
老邓 2009-06-20
  • 打赏
  • 举报
回复
2楼很好很强大!
别逗我乐 2009-06-20
  • 打赏
  • 举报
回复
照例贴出程序结果:
报名人数:5
每个考场能容纳 :3
输入第1位考生学号(必须为5位数字):20091
输入第1位考生姓名(只限字母):caojie1
输入第2位考生学号(必须为5位数字):20092
输入第2位考生姓名(只限字母):caojie2
输入第3位考生学号(必须为5位数字):20093
输入第3位考生姓名(只限字母):caojie3
输入第4位考生学号(必须为5位数字):20094
输入第4位考生姓名(只限字母):caojie4
输入第5位考生学号(必须为5位数字):20095
输入第5位考生姓名(只限字母):caojie5
*********************操作************************
查询全部学生信息,输入:1
按考场号显示考生信息,输入:2
按学号显示考生信息,输入:3
按姓名显示考生信息,输入:4
退出,输入:0
*************************************************
1
学号:20091姓名: caojie1 准考证号:01182000 考场号:01 座位号:00
学号:20092姓名: caojie2 准考证号:01182001 考场号:01 座位号:01
学号:20093姓名: caojie3 准考证号:01182002 考场号:01 座位号:02
学号:20094姓名: caojie4 准考证号:02182000 考场号:02 座位号:00
学号:20095姓名: caojie5 准考证号:02182001 考场号:02 座位号:01
请按任意键继续. . .
*********************操作************************
查询全部学生信息,输入:1
按考场号显示考生信息,输入:2
按学号显示考生信息,输入:3
按姓名显示考生信息,输入:4
退出,输入:0
*************************************************
2
输入考场号( 考场号 <= 2):2
2号考场有:
学号:20094姓名: caojie4 准考证号:02182000 考场号:02 座位号:00
学号:20095姓名: caojie5 准考证号:02182001 考场号:02 座位号:01
请按任意键继续. . .
*********************操作************************
查询全部学生信息,输入:1
按考场号显示考生信息,输入:2
按学号显示考生信息,输入:3
按姓名显示考生信息,输入:4
退出,输入:0
*************************************************
3
输入学生学号(必须为5位数字):20091
学号:20091姓名: caojie1 准考证号:01182000 考场号:01 座位号:00
请按任意键继续. . .
*********************操作************************
查询全部学生信息,输入:1
按考场号显示考生信息,输入:2
按学号显示考生信息,输入:3
按姓名显示考生信息,输入:4
退出,输入:0
*************************************************
3
输入学生学号(必须为5位数字):20096
查无此人!请按任意键继续. . .
*********************操作************************
查询全部学生信息,输入:1
按考场号显示考生信息,输入:2
按学号显示考生信息,输入:3
按姓名显示考生信息,输入:4
退出,输入:0
*************************************************
4
输入学生姓名:caojie2
学号:20092姓名: caojie2 准考证号:01182001 考场号:01 座位号:01
请按任意键继续. . .
*********************操作************************
查询全部学生信息,输入:1
按考场号显示考生信息,输入:2
按学号显示考生信息,输入:3
按姓名显示考生信息,输入:4
退出,输入:0
*************************************************
0
Process returned 0 (0x0) execution time : 114.140 s
Press any key to continue.

补充:
1.
由于把各个函数的定义和实现分开了,考虑到参数的传递问题,所以把“考场能容纳的人数”定义成了常量,不能由用户输入,类似的还有“
报名人数” ,在main中,有下面的定义,
extern const int FULL_NUMBER = 3;//假设每个考场能容纳的人数
extern const int STUDEN_COUNT = 5; //假定报名的人数
测试的时候,手动改正就好!
2.
程序还有很多可以优化的地方,限于时间或是本人水平有限,没能给出。
比如可以从文件中,读取结构体,这样学生人数多的时候,不至于疲于输入!
再比如,程序的健壮性上,对于数据合法输入的检查问题上,明显是不够的。表现就是,由于用户的不合理输入,导致程序的崩溃。
3.
本人冒天下之大不韪,帮楼主做作业,望楼主以后三四而后行!
努力学习是正道!
4.
本人QQ:380208702
Email:caojie-jerry@163.com
我们可以一起探讨问题,请多指教
愿所有C++爱好者,永远健康幸福!
别逗我乐 2009-06-20
  • 打赏
  • 举报
回复
////////////////////////////////////////////////
//楼主真的应该感谢我了,呵呵.
//共有3个文件,只要新建工程,包含他们,就行了。
//Student.h 各种函数的定义文件。
//Student.cpp 上面函数的实现文件
//main.cpp 主函数,用来测试的
////////////////////////////////////////////////

//Student.h
#ifndef STUDENT_H
#define STUDENT_H

struct Student
{
int num; //学号(为5位的学号)
char name[20]; //姓名
char testID[9]; //准考证号(8位)
};
void input_info(Student*stu,int count);//录入考生的报名信息,即学号和姓名

void print_one(Student*stu);//显示一个考生的考试信息,如输出考生的学号、姓名、准考证号、考场号和座位号。
void print_by_attendNum(Student*stu,int attendNum);//按考场号显示考生信息。

int search_by_num(Student*,int num);//按照学号,查找信息
int search_by_name(Student*,char*name);//按照姓名,查找信息

void set_attendNumber(Student*stu);//编排考场号
void change_CODE(Student*);//学校代码转换
void get_num_first2(Student*);//取学号前两位
void set_place(Student*stu,int place_num);//编排座位号

int get_place(int*);//获取一个,按照随机数编排的座位号。
void set(int*,int num);//辅助函数,将数组置一
bool search(int*array,int point);

#endif // STUDENT_H



//Student.cpp
#include "Student.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
using std::cout;
using std::cin;
using std::endl;
extern int const STUDEN_COUNT;
extern const int SHCOOL_CODE ;
extern const int FULL_NUMBER ;

//录入考生的报名信息,即学号和姓名
void input_info(Student*stu,int count)
{
for (int i= 0;i < count ; ++i)
{
std::cout<<"输入第"<<i+1<<"位考生学号(必须为5位数字):";
std::cin>>stu[i].num;
std::cout<<" 输入第"<<i+1<<"位考生姓名(只限字母):";
std::cin>>stu[i].name;
std::cout<<std::endl;
stu[i].testID[0] = '\0';
}
}
//显示一个考生的考试信息,如输出考生的学号、姓名、准考证号、考场号和座位号
void print_one(Student*stu)
{
std::string str1((*stu).testID,2);//考场号
std::string str2( (*stu).testID+6 );//座位号
cout<<"学号:"<<(*stu).num<<"姓名:"<<std::setw(10)<<(*stu).name
<<" 准考证号:"<<(*stu).testID<<" 考场号:"<<str1<<" 座位号:"<<str2<<endl;

}
//按考场号显示考生信息。
void print_by_attendNum(Student*stu,int attendNum)
{
int num =attendNum;//保存要查的考场号
int stu_attendNum[STUDEN_COUNT];//暂时存储所有学生的考场号
for (int j = 0;j < STUDEN_COUNT; ++j)
{
char substr[3]={'\0','\0','\0'};
substr[0] = stu[j].testID[0];
substr[1] = stu[j].testID[1];
stu_attendNum[j]=atoi(substr);
}
//考场从1号开始
cout<<num<<"号考场有:"<<endl;
for (int j = 0;j < STUDEN_COUNT; ++j)
{
if (stu_attendNum[j]==num)
{
print_one(stu+j);
}
}
}
//按照学号,查找信息
int search_by_num(Student*stu,int num)
{
for (int j = 0;j < STUDEN_COUNT; ++j)
{
if (stu[j].num==num)
{
return j;
}
}
return -1;
}
//按照姓名,查找信息
int search_by_name(Student*stu,char*name)
{
for (int j = 0;j < STUDEN_COUNT; ++j)
{
if (std::strcmp(stu[j].name,name)==0)
{
return j;
}
}
return -1;
}
//编排考场号
void set_attendNumber(Student*stu,int count_attendNum)
{
char num[3]={'0'};
if (count_attendNum < 10 )//保证宽度为2
itoa(count_attendNum,num+1,10);
else
itoa(count_attendNum,num,10);
std::strcat( (*stu).testID,num );
}
//学校代码转换
void change_CODE(Student*stu)
{
char code[3];
//char *itoa(int value, char *string, int radix);是整形转 char *
itoa(SHCOOL_CODE,code,10);
std::strcat( (*stu).testID,code );
}
//取学号前两位
void get_num_first2(Student*stu)
{
char num[3];
itoa((*stu).num / 1000 ,num,10);//学号为5位的,取前两位
std::strcat( (*stu).testID,num );
}
//编排座位号
void set_place(Student*stu,int place_num)
{
char num[3]={'0'};
if (place_num < 0||place_num > FULL_NUMBER)
return;
if (place_num < 10 )//保证宽度为2
itoa(place_num,num+1,10);
else
itoa(place_num,num,10);
std::strcat( (*stu).testID,num );
}
//编排准考证号
void set_attendNumber(Student*stu)
{
int array[FULL_NUMBER];//用于存储一个考场座位的状态
set(array,FULL_NUMBER);//该考场所有位置都可用
float max_number = static_cast<float>(FULL_NUMBER);//浮点型保存考场容纳人数
for (int i = 0;i< STUDEN_COUNT; ++i)
{
set_attendNumber(stu+i,static_cast<int>(i/max_number+1));//考场号(2位)
change_CODE(stu+i);//学校代码(2位)
get_num_first2(stu+i);//考生学号的前两位(2位)
if (i%FULL_NUMBER == 0)
set(array,FULL_NUMBER);
set_place(stu+i,get_place(array));//座位号(2位)
}
}
//获取一个,按照随机数编排的座位号
int get_place(int*array)
{
srand( (unsigned)time( NULL) );
int point = -1;
while (true)
{
point = rand()%FULL_NUMBER;
if (search(array,point))
{
array[point]=0;
return point;
}
}

}
//辅助函数,将数组置一
void set(int*array,int num )
{
for (int i= 0;i<num;++i)
array[i] = 1; //1是说,该座位可用
}
bool search(int*array,int point)
{
return array[point];
}

//main.cpp
#include <iostream>
#include "Student.h"
using namespace std;
extern const int STUDEN_COUNT = 5; //假定报名的人数
extern const int SHCOOL_CODE = 18;//学校代码
extern const int FULL_NUMBER = 3;//假设每个考场能容纳的人数
int main()
{
//输入并初始化部分
Student stu[STUDEN_COUNT];
cout<<"报名人数:"<<STUDEN_COUNT<<endl;
cout<<"每个考场能容纳 :"<<FULL_NUMBER<<endl;
input_info(stu,STUDEN_COUNT);//录入考生的报名信息,即学号和姓名
set_attendNumber(stu);//编排准考证号

//查询修改部分
while (true)
{
int choice=-1;
cout<<"*********************操作************************"<<endl;
cout<<"查询全部学生信息,输入:1"<<endl;
cout<<"按考场号显示考生信息,输入:2"<<endl;
cout<<"按学号显示考生信息,输入:3"<<endl;
cout<<"按姓名显示考生信息,输入:4"<<endl;
cout<<"退出,输入:0"<<endl;
cout<<"*************************************************"<<endl;
cin>>choice;
switch (choice)
{
case 1:
{ //显示全部考生的考试信息,如输出考生的学号、姓名、准考证号、考场号和座位号
for (int i=0;i<STUDEN_COUNT;++i)
{
print_one(stu+i);
}
system("pause");
break;
}
case 2:
{
//按考场号分别显示考生信息。
int max_attnum =-1;
if (STUDEN_COUNT%FULL_NUMBER==0)
max_attnum=STUDEN_COUNT/FULL_NUMBER;
else//上取整
max_attnum=static_cast<int>(static_cast<double>(STUDEN_COUNT)/FULL_NUMBER + 1);

cout<<"输入考场号( 考场号 <= "<<max_attnum<<"):";
int tmp = -1;
cin>> tmp;
print_by_attendNum(stu, tmp);
system("pause");
break;
}
case 3:
{
//按学号显示考生信息
cout<<"输入学生学号(必须为5位数字):";
int num;
cin>>num;
cout<<endl;
int pos = -1;
pos=search_by_num(stu,num);
if (pos!=-1)
print_one(stu+pos);
else
cout<<"查无此人!";
system("pause");
break;
}
case 4:
{//按姓名显示考生信息
cout<<"输入学生姓名:";
char name[20];
cin>>name;
cout<<endl;
int pos = -1;
pos=search_by_name(stu,name);
if (pos!=-1)
print_one(stu+pos);
else
cout<<"查无此人!";
system("pause");
break;
}
case 0:
return 0;
default:
break;
}
}
return 0;
}
lixing01 2009-06-20
  • 打赏
  • 举报
回复
如果不是应付考试,自己先尽量写,然后把代码贴出来,有疑问的地方标注,这样对你对大家都好。
toma2008 2009-06-20
  • 打赏
  • 举报
回复
学习了
amossavez 2009-06-20
  • 打赏
  • 举报
回复
估计是手上正有,呵呵
Walf_ghoul 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chyxion 的回复:]
这样的习惯不好,别人不能老帮你,你可以叫大家帮你修改代码什么的,
[/Quote]

顶个
DirectX2009 2009-06-20
  • 打赏
  • 举报
回复
学习了···2楼很好很强大··
ameyume 2009-06-20
  • 打赏
  • 举报
回复
顶一下
26°C东皇大叔 2009-06-20
  • 打赏
  • 举报
回复
这样的习惯不好,别人不能老帮你,你可以叫大家帮你修改代码什么的,
信念 2009-06-20
  • 打赏
  • 举报
回复
路过。。。
光宇广贞 2009-06-20
  • 打赏
  • 举报
回复
顶一个。

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧