急!!跪求!!分要多少给多少,C++!急!!~

编写一个程序,为某服务公司征询顾客意见,从n(小于或等于40)个优秀服务员中评选十位服务员明星。具体要求如下:
(1)服务员按1,2,...连续编号,每个编号用两个字符表示,即01,02,...。
(2)收到的选票以下格式存于文本文件source.txt中,一行字符串对应一张选票,其中姓名十个字符,地址30个字符,十个服务员编号20个字符。
(3)对应名次的服务员编号可以有空缺,但必须用00表示。
(4)若编号超出规定范围,或编号重复出现,作为废票处理。
(5)按选票中所列最佳服务明星顺序给所列服务员按以下标准评分:
一 二 三 四 五 六 七 八 九 十
15 12 9 7 6 5 4 3 2 1
(6)按各位服务员得分数由高到低顺序排队,列出前十名最佳服务明星排行表:
名次 服务员编号 合计得分 合计得票数
若得分相同,得票数多的在前:若得分和得票数都相同,则编号小的在前。
设source.txt文件中的内容如下:
丁一 地球村100号 01020304000607080910
王二 地球村100号 11121314151617181920
张三 地球村100号 21222324252627282930
李四 地球村100号 31323334353637383940
马五 地球村100号 12020304000607080910
杨六 地球村100号 12020304000607080910
赵七 地球村100号 12020304000607080910
朱八 地球村100号 12020304000607080910
程序运行结果为:
名次 服务员编 合计得分 合计得票数
1 12 72 5
2 2 60 5
3 3 45 5
4 4 35 5
5 6 25 5
6 7 20 5
7 1 15 1
8 11 15 1
9 21 15 1
10 31 15 1
满意了我继续加分!!

面向过程的结构体:

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

struct Employee
{
int vote_id,//员工编号
vote_count,//得票数
vote_score;//得分数
};

void StructInitialize(Employee* emp,int size=40)//结构体初始化函数,编号自动排列,其它成员初始化为零
{
for(int i=0;i<size;i++)
{
emp[i].vote_id=i+1;
emp[i].vote_count=0;
emp[i].vote_score=0;
}
}

int* DataFormat(int *a,int size)//格式化数组,格式化后新数组中每一位转换为十进制整数
{
int* b=new int[size/2];
for(int i=0;i<size;i+=2)
b[i/2]=10*a[i]+a[i+1];
return b;
}

int IsAvailableVote(int*p,int n)//判定p后n个数字是否符合选票要求
{
int*q1,*q2;
q1=q2=p;
for(int i=0;i<n;i++)
{

if(q1[i]<0||q1[i]>40)//判断是否超出规定编号范围
return 0;
for(int j=i+1;j<n;j++)//判定是否有重复选同一个编号
if(q1[i]==q2[j])
return 0;
}
return 1;
}

void SetFalseVote(int* p,int n)//将不符合要求的选票所在区域置为-1
{
int*q1,*q2;
q1=q2=p;
q2=q2+n;//q2移动到每行的尾部
if(!IsAvailableVote(q1,n))
while(q1!=q2)
{
*q1=-1;//置-1
q1++;//指针向后移动直到指到和q2相同位置
}
}

int* VoteSelect(int* a,int size)//将整个数组区域所有不符合要求选票选出,即所代表区域值置为-1
{
int row_count=0,//文件中行计数,即选票计数
*p=a;//指向传入数组首部
while(row_count<size/10)//结束条件为所有选票都判断完毕
{
SetFalseVote(p,10);//如选票不符合要求,则将其所对应区域置为-1
p+=10;//移到下一张选票
row_count++;//选票数增1
}
return a;
}

void VoteCount(Employee* emp,int *a,int size)//统计符合要求的选票,将结果送入结构体数组
{
int*p=a,count=0,rank=0,i=0;
while(count<size)
{
if(*p!=0&&(*p)!=-1)
emp[*p-1].vote_count++;
p++;
count++;
}
count=0;//清零
while(count<size)//此种算法,数组元素为零时被自动过滤掉,因此不需要考虑该情况
{
count++;
rank=count%10;
i=a[count-1]-1;//count-1表示数组元素下标,i表示结构体数组下标,
//由于下标从零开始,所以减1
//cout<<a[count-1]<<" ";
if(i!=-1)
{
switch(rank)
{
case 1:
emp[i].vote_score+=15;break;
case 2:
emp[i].vote_score+=12;break;
case 3:
emp[i].vote_score+=9;break;
case 4:
emp[i].vote_score+=7;break;
case 5:
emp[i].vote_score+=6;break;
case 6:
emp[i].vote_score+=5;break;
case 7:
emp[i].vote_score+=4;break;
case 8:
emp[i].vote_score+=3;break;
case 9:
emp[i].vote_score+=2;break;
case 0:
emp[i].vote_score+=1;break;
}
}
}
}
void Show(Employee* emp,int n)
{
for(int i=0;i<n;i++)
cout<<emp[i].vote_id<<'\t'<<emp

[i].vote_count<<'\t'<<emp[i].vote_score<<endl;
}

int RowCount(char* filename)//行计数函数
{
int row=1,count=0;
char temp;
ifstream infile;
infile.open(filename);
if(!infile)
{
cout<<"不能打开输入文件a!"<<endl;
exit(1);
}
infile>>noskipws;
while(infile>>temp)
{
count++;
if(count%61==0)row++;
}
infile.close();
return row;
}

int* FileRead(char* filename)//文件读取函数,按要求提取代表选票的字符串到一维数组中
{
ifstream infile;
char temp;//临时字符变量
int char_count=0,//文件中字符计数
row_count=0,//文件中行计数
row,//存储文件中的行数
**arr,//指向二维数组
*arr1,//指向一维数组
*p_array;//指向DataFormat()返回的数组

row=RowCount(filename);
cout<<"文件中共有行数(即选票张数):"<<row<<endl;//测试
cin.get();

arr=new int*[row];
for(int i=0;i<row;i++)
arr[i]=new int[21];//申请动态二维数组,因为存在最后一个换行符,所以是21不是20

infile.open(filename);
if(!infile)
{
cout<<"无法打开输入文件"<<endl;
exit(1);
}
infile>>noskipws;
while(infile>>temp)
{
char_count++;
if(char_count>=41+61*row_count&&char_count<=61+61*row_count)
{
arr[row_count][char_count-(41+61*row_count)]=temp-'0';//字符型映射为整型,数学方法确定每行规律
if(char_count%61==0)
row_count++;
}
}
infile.close();

arr1=new int[row*20];
for(int _i=0;_i<row;_i++)
for(int j=0;j<20;j++)//过滤掉每行最后的换行符所以结束条件是20不是21
arr1[_i*20+j]=arr[_i][j];//二维数组转换为一维数组

for(int __i=0;__i<row;__i++)
delete arr[__i];
delete arr;
p_array=DataFormat(arr1,row*20);//格式化数组,将将arr1指向数组转化为十进制数组返回给p_array指针

return p_array;//需要在最终释放动态内存
}

void Sort(Employee *p,int n)//排序函数,所得结果符合要求,因此不需要考虑多关键字排序
{
int index;
Employee inserter;
for(int i=1;i<n;i++)
{
inserter=p[i];
index=i-1;
while(index>=0&&p[index].vote_score<inserter.vote_score)
{
p[index+1]=p[index];
index--;
}
p[index+1]=inserter;
}
}

void OutPut(Employee* emp,int n)
{
cout<<"名次"<<setw(15)<<"服务员编号"<<setw(15)<<"合计得分"<<setw(15)<<"合计得票数"<<endl;
for(int i=0;i<10;i++)
cout<<i+1<<setw(15)<<emp[i].vote_id<<setw(15)<<emp[i].vote_score<<setw(15)<<emp[i].vote_count<<endl;
}
int main()
{

Employee emp[40],//存储40名员工
*p=emp;//指向结构体数组
int *new_array,//指向FileRead中返回的整形数组
row;//文件中字符串行数(即选票张数)

row=RowCount("source.txt");//文件行计数
new_array=FileRead("source.txt");//指向一维数组
new_array=VoteSelect(new_array,row*10);//筛选符合要求的选票
StructInitialize(emp,40);//结构体初始化
VoteCount(emp,new_array,row*10);//选票处理(计算合计得分,合计得票数
Sort(p,40);//对结构体数组进行逆序排序
OutPut(p,40);//输出前十名明星服务员

delete []new_array;//释放在FileRead()中申请的动态内存
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-01-10
啰嗦了一大顿也没看明白,对不起,没方法帮你了,请原谅
第2个回答  2009-01-10
找死啊!!!!!!!!!!!!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
神经质啊!!!!!!!!!!!!!~!~!!~~~~~~~~~~~~~~
第3个回答  2009-01-09
挺烦的~·~
第4个回答  2009-01-09
不清楚啊

c++ 高手请进,我只有这些分了,谢了,急急急急急!!!
include <stdlib.h> define LEN 256 struct node { char str[LEN]; \/\/字符串 struct node* next;\/\/指向下个结构 };int main(){ struct node head_node;struct node* p = &head_node;struct node* q;int i;scanf("%s", head_node.str);\/\/输入第一个字符串 for (i=0;i<100000 - ...

江苏省计算机二级等级考试C++上机部分的成绩是怎么给的
3、考试中除了程序填空题和类似填空的程序修改题,程序都会对结果生成一个文件,软件是对生成的结果文件进行检查,从而得到该部分的考试成绩。所以,上机考试程序设计题目的评分标准是“按步骤给分”的说法是错误的!二级上机考试: 二级上机考试题目的类型和分值:二级C语言: 序号 考题类型 分值 1 程序填...

C++二级考试多少分通过?
单项选择题40分(含公共基础知识部分10分)。操作题60分(包括基本操作题、简单应用题及综合应用题)。考试方式:上机考试,考试时长120分钟,满分100分。

C++考级及格分多少分
60分。根据中国电子学会官网查询,C++电子学会考级的及格分数是60分,这个及格分数是指考生在考试中获得的分数达到了考试机构所设定的及格标准,从而被认定为通过了考试。具体的考试内容和评分标准可能会因不同的考试机构和地区而有所不同。C++电子学会考级的内容会包括C++语言的基础知识、编程技能、算法和数...

计算机二级考试c++的考试有多少选择题 填空题和什么其他题??分值多少...
各科上机考试时间均为120分钟,满分100分。获证条件:总分不低于60分。考核内容二级定位为程序员,考核内容包括公共基础知识和程序设计。所有科目对基础知识作统一要求,使用统一的公共基础知识考试大纲和教程。二级公共基础知识在各科考试选择题中体现。程序设计部分,主要考查考生对程序设计语言使用和编程调试等...

C++运动会比赛计分系统!求助!
运动会比赛计分系统程序功能简介:要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数各项目名次取法有如下几种:取前5名:第一名得分7分,第二名得分5,第三名得... 运动会比赛计分系统 程序功能简介: 要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数 各项目名次取法有...

用C++编的分数计算器的课程设计报告,急用!!!
include<string.h> define MAX 10 typedef struct { char data[MAX];int top;}StackChar;StackChar StackCharInit(){ StackChar S;S.top=-1;return S;} void StackCharPush(StackChar &S,char x){ if(S.top==MAX-1){ printf("Stcak Full!\\n");exit(0);} S.top++;S.data[S.top...

C++程序能分配的最大内存是多少?
windows下栈区最大分配为2M,如果是new和malloc内存有多大就能分多大,前提小于寻址空间(32位下是4G)中的用户空间(windows下系统空间与用户空间各占一半),所以是2G,谢谢!

c语言c++输入11位同学的成绩,将其按从小到大排序,并求出平均分?急急...
void main{ int grade[11];int i,j,k;int temp,aver;int sum=0;printf("请输入11位学生的成绩");scanf("%d",grade);for(i=0,j=10;i<j;i++,j--){ if(grade[i]>grade[j]){ temp=grade[i];grade[i]=grade[j];grade[j]=temp;} } for(k=0;k<11;k++){ printf("%d",...

在线等c++题解 急急急!!!
所以最糟糕的情况是最终C得2分。这是第一种情况。第二种情况:如果x=a时,C得分=x-a;当x=a时,C得分=y-a;当y   \/\/控制台操作头文件int main() \/\/主函数{int n,m,a,x,b,y; \/\/整型变量 int t,z=0; \/\/z是C的最少得分 scanf("%d %d",&n,&m);...

相似回答