C++。编程题,题目如下。
发布网友
发布时间:2022-05-17 16:33
我来回答
共3个回答
热心网友
时间:2023-10-29 19:46
以下是一个学生管理系统:
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "stdlib.h"
#define CMD_START printf("\n\n######### Start a command #########\n");
/* 用来标记一个命令执行的开始*/
#define CMD_END printf( "\n######### End a command #########\n\n");
/* 用来标记一个命令执行的结束 ,这两个语句是为了提供更好的用户界面而写的 */
#define DATA_FILE "data.dat"
/* 这是 数据文件名 */
#define TEMP_FILE "temp.dat"
/* 这是一个临时的文件的名字,在删除记录的函数中使用的,
详细内容参考 Delete() 函数 */
typedef struct tagStudent
{
char ID[30]; /* 学号 */
char Name[30]; /* 姓名 */
char Class[255]; /* 班级 */
char Sex; /* 性别 ,值为 F 或 f 或 M 或 m */
int Math; /* 数学成绩 */
int English; /* 英语成绩 */
int Compute; /* 计算机成绩 */
int Philosophy; /* 哲学成绩 */
int PE; /* 体育成绩 */
} Student;
/* 这是学生信息结构体 */
int ShowMenu(); /* 在屏幕上打印 主菜单 的函数,它的返回值为 所选 菜单的 项目编号 */
int ReadData(FILE*,Student* ); /* 从一个 打开的数据文件中读取 记录的函数,错误返回 0 */
int WriteData(FILE* , Student* ); /* 向一个数据文件中 写入 记录的函数,错误返回 0 */
void Output_Rec(Student*); /* 在屏幕上 打印 一条记录 */
void Input_Rec(Student*); /* 让用户输入 记录的 各个项目的 值,在添加记录时用到了 */
void CopyRec(Student* , Student* ); /* 复制一条记录 到 另一个记录中 */
/* 题目中要求的函数 */
void Print(); /* 实现查看数据文件内容的函数 */
void Add(); /* 添加记录的函数 */
void Delete(); /* 删除记录的函数 */
void Statistics(); /* 对数据进行统计分析的函数 */
void Find(int); /* 实现查找功能的函数,参数决定 是按 ID 查找 还是按 Name 查找 */
int quit; /* 一个全局变量,在下面的 main() 函数中,用来决定何时退出主循环 */
void main()
{
int cmd; /* 用户所选的 菜单 项目 的标号 */
quit = 0; /* 初始化 为 不退出 */
/* 这是程序的主循环,每次都将 主菜单打印出来,
供用户选择相应的 序号 来执行相应的功能 */
while( ! quit )
{
cmd = ShowMenu(); /* 显示 主菜单,并返回用户所选择的 菜单项 的 编号 */
CMD_START /* 在屏幕上打印一行分隔符,告诉用户这是一个子功能的开始 */
switch( cmd ) /* 用多项分支 根据 用户的选择 调用 相应的函数 */
{
case 1:
Print(); break; /* 用户选择 1 号菜单,程序执行 查看的数据文件的函数 */
case 2:
Add(); break; /* 用户选择 2 号菜单,程序执行 添加记录的函数 */
case 3:
Delete(); break; /* 用户选择 3 号菜单,程序执行 删除记录的函数 */
case 4:
Statistics(); break; /* 用户选择 4 号菜单,程序执行 统计数据的函数 */
case 5:
Find(5); break; /* Find_ID ,5 号菜单执行 按 ID(学号)查找的功能 */
case 6:
Find(6); break; /* Find_Name,6 号菜单执行 按 Name(姓名)查找的功能 */
case 7:
quit = 1; /* 用户选择了退出菜单 */
printf(" Thank you for your using .\n\n Happy everyday !!\n\n Bye Bye ....\n");
break;
default:
printf(" Please Input a number between\t1\tto\t7.\n");
/* 用户所输入的 序号不在所处理的范围内 */
}
CMD_END /* 打印一行分隔符,告诉用户 他所选择的菜单的功能已经执行完毕 */
if (quit != 1) /* 检查用户是否 要求 退出 */
{
printf(" Press any key to Return Main Menu ....\n");
getch(); /* 用 一个 无回显 的 字符输入函数 来实现暂停执行,按 任意键 继续的功能 */
}
}
}
int ShowMenu()
{
int cmd = 0; /* 保存用户的选择 */
/* 定义 程序所支持的菜单项目 */
char Menu_SeeData[] = "\t1 .\tView the Records in the data file\n"; /* 查看数据文件 */
char Menu_Add[] = "\t2 .\tAdd New Record\n"; /* 添加记录 */
char Menu_Delete[] = "\t3 .\tDelete an old Record\n"; /* 删除记录 */
char Menu_Statistics[] = "\t4 .\tMake a Statistics\n"; /* 统计分析 */
char Menu_Find_ID[] = "\t5 .\tFind a Record from the ID\n"; /* 按 学号(ID) 查找 */
char Menu_Find_Name[] = "\t6 .\tFind a Record from the Name\n"; /* 按 姓名(Name) 查找 */
char Menu_Quit[] = "\t7 .\tQuit\n"; /* 退出 */
/* 在屏幕上打印 主菜单 */
printf("\n\n############ Main Menu ###############\n");
printf( "##############################################\n\n");
printf(Menu_SeeData);
printf(Menu_Add);
printf(Menu_Delete);
printf(Menu_Statistics);
printf(Menu_Find_ID);
printf(Menu_Find_Name);
printf(Menu_Quit);
printf("\n##############################################");
printf("\n\n Input the index of your choice : ");
scanf("%d" , &cmd); /* 接受用户 选择 */
printf("\n");
return cmd; /* 返回用户的输入,交给主循环处理 */
}
void Print() /* 打印 数据文件的 记录内容 */
{
FILE* fp = NULL; /* 文件指针 */
Student rec; /* 存放从文件中读取的记录 */
int i = 0; /* 实现 计数 和 分屏打印的功能 */
fp = fopen(DATA_FILE , "rb"); /* 以 二进制读 方式 打开数据文件 */
if(fp == NULL) /* 打开文件出错 */
{
printf(" Can not open the data file : %s\n" , DATA_FILE);
return ;
}
while(ReadData(fp , &rec)) /* ReadData() 函数出错或到文件末尾时返回 0,可以做循环条件 */
{
Output_Rec(&rec); /* 正确读取,将记录输出 */
printf(" ------------------------------------------");
/* 打印一行分隔符,营造好的用户界面 */
i++; /* 计数器 加一 */
if( i % 4 == 0) /* 显示 4 个暂停一下 */
{
printf("\n Press any key to continue ... \n");
getch();
}
}
printf("\n The current data file have\t%d\trecord .\n" , i );
fclose(fp); /* 关闭文件 */
}
void Add() /* 添加记录 */
{
Student rec;
FILE* fp = NULL;
Input_Rec( &rec ); /* 让用户输入新记录的各项内容 */
fp = fopen(DATA_FILE ,"ab"); /* 以 添加 方式打开数据文件 */
if( fp == NULL)
{
printf(" Can not open the data file to write into ... \n");
return ;
}
if( WriteData(fp, &rec) == 1) /* 将 新记录 写入文件,并检查 是否正确写入*/
printf("\n\n Add New Record Success \n\n");
else
printf("\n\n Failed to Write New Record into the data file \n");
fclose(fp);
}
void Delete() /* 删除记录 */
{
Student rec;
FILE* fpr,*fpw; /* 两个文件指针,分别用于 读 和 写 */
char buf[30]; /* 接受 用户输入的 ID 缓冲区 */
char cmd[255]; /* 执行的系统命令 */
int del_count; /* 实际 删除的 记录数目 */
del_count = 0;
printf("\n Please type the ID of the record you want me to delete .");
printf("\n The ID : "); /* 提示用户 输入 */
scanf("%s" , buf);
fpr = fopen(DATA_FILE ,"rb"); /* 从 原来的记录文件中读取数据,跳过将要删除的记录 */
if( fpr == NULL)
{
printf(" Can not open the data file to read record ... \n");
return ;
}
fpw = fopen(TEMP_FILE,"wb"); /* 打开一个 临时文件 保存不删除的记录 */
if( fpw == NULL)
{
printf(" Can not open the data file to write into ... \n");
return ;
}
while(ReadData(fpr , &rec)) /* 读取 要保留的记录 */
{
if(strcmp(rec.ID , buf) != 0)
{
WriteData(fpw, &rec); /* 写入临时文件 ,然后删除 原数据文件,
再将临时文件该名为原数据文件的名字*/
}
else
{
del_count++; /* 跳过的记录数目,即删除的数目 */
}
}
fclose(fpr);
fclose(fpw);
strcpy(cmd , "del "); /* 构造命令串,用 system() 函数执行 */
strcat(cmd ,DATA_FILE);
system(cmd);
rename(TEMP_FILE,DATA_FILE); /* 直接调用 C 语言的改名函数将临时文件改名为数据文件的名字*/
printf("\n I have delete\t%d\trecord .\n" ,del_count);
}
void Statistics() /* 统计分析函数 */
{
int i50,i60,i70,i80,i90; /*平均分小于60 ,60-69,70-79,80-89,>=90 的分数段的学生数目*/
float avg; /*平均分*/
int sum ,sum_high,sum_low; /* 总分,总分最高分,总分最低分 */
Student stu_high,stu_low; /* 总分最高和最低 学生的信息 */
Student stu_math_high,stu_english_high; /* 各科 最高分的学生记录副本 */
Student stu_compute_high,stu_philosophy_high,stu_PE_high;
Student stu_math_low,stu_english_low; /* 各科最低的学生记录副本 */
Student stu_compute_low, stu_philosophy_low ,stu_PE_low;
FILE* fp;
Student rec;
int count; /* 一个计数器,用于判断是否第一次读取数据 */
count = sum = sum_high = sum_low = i50 = i60 = i60 = i70 =i80 = i90 = 0;
fp = NULL; /* 对 数据初始化 */
fp = fopen(DATA_FILE ,"rb");
if(fp == NULL)
{
printf("\nCan not open the data file to read ...\n");
return;
}
while(ReadData(fp , &rec)) /* 读取数据 */
{
count++; /* 计数器 加一 */
sum = rec.Math + rec.English + rec.Compute + rec.PE+ rec.Philosophy; /* 求和 */
/* average */
avg = ((float)sum) / 5; /* 平均分 */
/* 下面对各个分数段进行统计 */
if(avg < 60)
i50++;
else if(avg <70)
i60++;
else if(avg < 80)
i70++;
else if(avg < 90)
i80++;
else
i90++;
/*highest and loeest*/
if(count <= 1) /* 第一次读取,执行初始化,不进行比较 */
{
sum_high = sum_low = sum;
CopyRec(&stu_high , &rec);
CopyRec(&stu_low ,&rec);
}
else
{
if(sum > sum_high)
{
sum_high = sum; /* 得到最高总分 */
CopyRec(&stu_high , &rec); /* 保存总分最高的学生的信息 */
}
if(sum < sum_low)
{
sum_low = sum; /* 得到最低分 */
CopyRec(&stu_low , &rec); /* 保存总分最低的学生的信息 */
}
}
/* subject highest and low */
if(count == 1) /* 同上面一样,执行初始化 */
{
CopyRec(&stu_math_high,&rec);
CopyRec(&stu_english_high , &rec);
CopyRec(&stu_compute_high, &rec);
CopyRec(&stu_philosophy_high,&rec);
CopyRec(&stu_PE_high , &rec);
CopyRec(&stu_math_low,&rec);
CopyRec(&stu_english_low , &rec);
CopyRec(&stu_compute_low, &rec);
CopyRec(&stu_philosophy_low,&rec);
CopyRec(&stu_PE_low , &rec);
}
else
{
/* High */
/* 保存各科的最高分的学生的信息 */
if(rec.Math > stu_math_high.Math)
CopyRec(&stu_math_high ,&rec);
if(rec.English > stu_english_high.English)
CopyRec(&stu_english_high ,&rec);
if(rec.Compute > stu_compute_high.Compute)
CopyRec(&stu_compute_high , &rec);
if(rec.Philosophy > stu_philosophy_high.Philosophy)
CopyRec(&stu_philosophy_high , &rec);
if(rec.PE > stu_PE_high.PE)
CopyRec(&stu_PE_high , &rec);
/* low */
/* 保存各科的最低分的学生的信息 */
if(rec.Math < stu_math_low.Math)
CopyRec(&stu_math_low ,&rec);
if(rec.English < stu_english_low.English)
CopyRec(&stu_english_low ,&rec);
if(rec.Compute < stu_compute_low.Compute)
CopyRec(&stu_compute_low , &rec);
if(rec.Philosophy < stu_philosophy_low.Philosophy)
CopyRec(&stu_philosophy_low , &rec);
if(rec.PE < stu_PE_low.PE)
CopyRec(&stu_PE_low , &rec);
}
}/* While End */
if(count < 1)
{
printf("\n There is no record in the data file .\n");
}
else
{
/* average */
/* 输出平均分的分段统计信息 */
printf("\n The count in each segment :\n");
printf("\t < 60\t:\t%d\n",i50);
printf("\t60 - 69\t:\t%d\n",i60);
printf("\t70 - 79\t:\t%d\n",i70);
printf("\t80 - 90\t:\t%d\n",i80);
printf("\t >= 90\t:\t%d\n",i90);
printf(" ------------------------------------------");
getch();
/*highest and loeest*/
/* 输出总分最高的学生的信息 */
printf("\n The Highest Mark Student:\n");
printf(" The Mark is : %d\n" , sum_high);
printf(" The student is :\n");
Output_Rec(&stu_high);
/* 输出总分最高的学生的信息 */
printf("\n The Lowest Mark Student:\n");
printf(" The Mark is : %d\n" , sum_low);
printf(" The student is :\n");
Output_Rec(&stu_low);
printf(" ------------------------------------------\n");
getch();
/* subject highest and low */
/* 输出各科最高和最低分的统计信息 */
printf(" The Highest\tMath :\n");
Output_Rec(&stu_math_high);
printf(" The Lowest Math :\n");
Output_Rec(&stu_math_low);
printf(" ------------------------------------------\n");
getch(); /* 暂停 ,按任意键继续 */
printf(" The Highest English :\n");
Output_Rec(&stu_english_high);
printf(" The Lowest English :\n");
Output_Rec(&stu_english_low);
printf(" ------------------------------------------\n");
getch();
printf(" The Highest Compute :\n");
Output_Rec(&stu_compute_high);
printf(" The Lowest Compute :\n");
Output_Rec(&stu_compute_low);
printf(" ------------------------------------------\n");
getch();
printf(" The Highest Philosophy :\n");
Output_Rec(&stu_philosophy_high);
printf(" The Lowest Philosophy :\n");
Output_Rec(&stu_philosophy_low);
printf(" ------------------------------------------\n");
getch();
printf(" The Highest PE :\n");
Output_Rec(&stu_PE_high);
printf(" The Lowest PE :\n");
Output_Rec(&stu_PE_low);
printf(" ------------------------------------------\n");
}
fclose(fp);
}
void Find(int isFind_From_ID) /* 查找函数 */
{
char buf[30]; /* 接受用户输入的条件的缓冲区 */
Student rec;
int find_count; /* 查找到的记录数目 */
FILE* fp;
find_count = 0;
fp = fopen(DATA_FILE ,"rb");
if( fp == NULL)
{
printf("\n Can not open the data file to search ...\n");
return;
}
switch(isFind_From_ID)
{
case 5: /*ID,按 学号查找*/
printf("\n Please Input the ID : ");
scanf("%s",buf); /* 提示用户输入 */
while(ReadData(fp , &rec)) /* 读取数据 */
{
if(strcmp(rec.ID , buf) == 0) /* 比较 */
{
find_count++;
Output_Rec(&rec); /* 输出符合条件的记录 */
printf(" ------------------------------------------\n");
}
}
break;
case 6: /*Name ,按 姓名 查找*/
printf("\n Please Input the Name : ");
scanf("%s",buf);
while(ReadData(fp , &rec))
{
if(strcmp(rec.Name , buf) == 0)
{
find_count++;
Output_Rec(&rec);
printf(" ------------------------------------------\n");
}
}
break;
default:
printf(" \nPlease type right index ...\n"); /*处理isFind_From_ID既不是5也不是6的情况*/
}
if(find_count >0) /* 输出找到的记录数目 */
{
printf("\n Have find out\t%d\trecord\n" ,find_count);
}
else
{
printf("\n I'm very sorry .\n I failed to find out the one you want .\n");
printf("\n I suggest that you change some other key words .\n");
}
fclose(fp);
}
int ReadData(FILE* fp, Student* Dest_Rec) /* 读取数据记录 */
{
int r;
if(( fp == NULL ) || ( Dest_Rec == NULL))
return 0; /* ERROR */
r = fread(Dest_Rec ,sizeof(Student) ,1 ,fp);
if(r != 1)
return 0;
return 1;
}
int WriteData(FILE* fp, Student* Src_Rec) /* 写入数据记录 */
{
int r;
if((fp == NULL) || (Src_Rec == NULL))
return 0; /* ERROR */
r = fwrite(Src_Rec , sizeof(Student) , 1, fp);
if(r != 1)
return 0;
return 1;
}
void Output_Rec( Student* stu) /* 在屏幕上输出 一个学生的信息 */
{
printf("\n");
printf(" Name : %s", stu->Name);
printf("\t\tSex : ");
if( stu->Sex == 'M' || stu->Sex == 'm' )
printf("Male");
else
printf("Female");
printf("\n ID : %s\t\tClass : %s\n",stu->ID ,stu->Class);
printf("Math = %d\tEnglish = %d\tCompute = %d\n" ,stu->Math ,stu->English, stu->Compute);
printf("Philosophy = %d\t\tPE = %d\n", stu->Philosophy ,stu->PE);
printf("\n");
}
void Input_Rec( Student* stu) /* 让用户输入 一个学生的各项信息 */
{
if(stu == NULL)
return;
printf("\n Name = ");
scanf("%s",stu->Name);
/* 下面这段代码实现只能输入 F ,f ,M ,m 的功能 */
printf("\tSex = (F|M) ");
while(1)
{
stu->Sex = getch(); /* 无回显输入 */
if(stu->Sex == 'F' || stu->Sex == 'f' || stu->Sex == 'M' || stu->Sex == 'm')
{
printf("%c",stu->Sex); /* 将用户输入的字符输出,模拟正常输入数据时的回显 */
break;
}
}
/* 下面 给出提示,让用户输入结构体的各项内容 */
printf("\n ID = ");
scanf("%s" , stu->ID);
printf("\n Class = ");
scanf("%s" , stu->Class);
printf("\n Math = ");
scanf("%d", &(stu->Math));
printf("\n English = ");
scanf("%d" ,&(stu->English));
printf("\n Compute = ");
scanf("%d" , &(stu->Compute));
printf("\n Philosophy = ");
scanf("%d" , &(stu->Philosophy));
printf("\n PE = ");
scanf("%d" , &(stu->PE));
printf("\n");
}
/* 因为结构体不能直接用 等号(=)赋值,写一个赋值函数 */
void CopyRec(Student* dest_stu, Student* src_stu)
{
/* 复制 源记录 的各项到 目标记录*/
strcpy(dest_stu->Name ,src_stu->Name);
strcpy(dest_stu->ID ,src_stu->ID);
strcpy(dest_stu->Class ,src_stu->Class);
dest_stu->Sex = src_stu->Sex;
dest_stu->Math = src_stu->Math;
dest_stu->English = src_stu->English;
dest_stu->Compute = src_stu->Compute;
dest_stu->Philosophy = src_stu->Philosophy;
dest_stu->PE = src_stu->PE;
}
虽然程序和你的要求不太一样,但很类似吧,他山之石,可以攻玉。。。。看了希望有所感悟有所帮助。
热心网友
时间:2023-10-29 19:46
按照LZ的要求写了一个版本的,主要是锻炼跟复习一下C++的内容。
在VC6.0下测试通过,所有文件信息如下,如果需要可以加QQ:564777005大家一起学习.
#ifndef H_STUINFO
#define H_STUINFO
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class CStuInfo
{
private:
public:
string sID;
string sName;
float score1;
float score2;
float score3;
float avg;
void print_to_console(int type);
void caculate_avg();
};
#endif
#include "stdafx.h"
#include "stdio.h"
#include "CStuInfo.h"
void CStuInfo::print_to_console(int type)
{
char str[100];
memset(str,'\0',100);
switch(type)
{
case 1:
sprintf(str,"%10s %10s %5.2f %5.2f %5.2f %5.2f\n",this->sID.c_str(),this->sName.c_str(),this->score1,this->score2,this->score3,this->avg);
cout<<str;
break;
case 2:
sprintf(str,"%10s %5.2f\n",this->sName,this->avg);
break;
default:
cout<<"\n没有定义该参数对应的输出格式\n"<<endl;
break;
}
}
void CStuInfo::caculate_avg()
{
this->avg = (this->score1 + this->score2 + this->score3) / 3.0;
}
#ifndef H_CSTUMANAGE
#define H_CSTUMANAGE
#include "CStuManage.h"
#include "CStuInfo.h"
#include <fstream>
#include <vector>
using namespace std;
class CStuManage
{
private:
vector<CStuInfo *> vecs;
public:
void add_stu_infor();
void print_info_all();
void caculate_avg_all();
void write_file();
void read_file();
void sort_infor(int type);
void print_good();
bool lessmark(const CStuInfo *s1,const CStuInfo* s2) ;
bool greatermark(const CStuInfo& s1,const CStuInfo& s2);
};
#endif
#include "stdafx.h"
#include "CStuInfo.h"
#include "CStuManage.h"
#include <algorithm>
#include <functional>
class sortInforDesc
{
public:
bool operator () (const CStuInfo *a,const CStuInfo *b) const
{
return (*a).avg < (*b).avg;
};
};
class sorInforInsc
{
public:
bool operator () (const CStuInfo *a,const CStuInfo *b) const
{
return (*a).avg > (*b).avg;
};
};
void CStuManage::add_stu_infor()
{
cout << "***********开始录入学生信息**********"<<endl;
int num;
while(true)
{
CStuInfo *info = new CStuInfo;
cout<< "\n学号:";
cin>>info->sID;
cout<<"姓名:";
cin>>info->sName;
cout<<"成绩1:";
cin>>info->score1;
cout<<"成绩2:";
cin>>info->score2;
cout<<"成绩3:";
cin>>info->score3;
vecs.push_back(info);
cout<<"\n输入完成 1->继续输入"<<endl;
cout<<"请选择:";
cin>>num;
if(num != 1)
{
break;
}
}
cout << "***********学生信息录入成功**********"<<endl;
}
void CStuManage::print_info_all()
{
for(vector<CStuInfo*>::iterator it = vecs.begin(); it!= vecs.end(); ++it)
{
(*it)->print_to_console(1);
}
}
void CStuManage::caculate_avg_all()
{
for(vector<CStuInfo*>::iterator it = vecs.begin(); it!= vecs.end(); ++it)
{
(*it)->caculate_avg();
}
}
void CStuManage::write_file()
{
string file_name;
cout<<"请输入保存文件路径(.txt):";
cin>>file_name;
ofstream out_file(file_name.c_str());
if(!out_file)
{
cout<<"系统错误:系统找不到指定路径。"<<endl;
return;
}
for(vector<CStuInfo*>::iterator it = vecs.begin(); it!= vecs.end(); ++it)
{
char str[100];
memset(str,'\0',100);
if(it == vecs.begin())
{
sprintf(str,"%10s %10s %5.2f %5.2f %5.2f %5.2f",(*it)->sID.c_str(),(*it)->sName.c_str(),(*it)->score1,(*it)->score2,(*it)->score3,(*it)->avg);
}
else
{
sprintf(str,"\n%10s %10s %5.2f %5.2f %5.2f %5.2f",(*it)->sID.c_str(),(*it)->sName.c_str(),(*it)->score1,(*it)->score2,(*it)->score3,(*it)->avg);
}
out_file<<str;
}
out_file.close();
cout << "\n***成功写入学生信息文件***"<<endl;
}
void CStuManage::read_file()
{
string file_name;
cout<<"请输入读取文件路径(.txt):";
cin>>file_name;
ifstream in_file(file_name.c_str());
if(!in_file)
{
cout<<"系统错误:系统找不到指定路径。"<<endl;
return;
}
for(vector<CStuInfo*>::iterator it = vecs.begin(); it!= vecs.end(); ++it)
{
delete (*it);
}
vecs.clear();
while(!in_file.eof() && in_file != NULL)
{
CStuInfo *info = new CStuInfo;
in_file>>info->sID>>info->sName>>info->score1>>info->score2>>info->score3>>info->avg;
vecs.push_back(info);
}
in_file.close();
cout << "\n***成功读取学生信息文件***"<<endl;
}
void CStuManage::sort_infor(int type)
{
if(type == 1)
{
sort(vecs.begin(),vecs.end(),sortInforDesc());
}
else if(type == 2 )
{
sort(vecs.begin(),vecs.end(),sorInforInsc());
}
else
{
cout<<"函数参数传递不正确!"<<endl;
}
cout << "\n***学生信息排序成功***"<<endl;
}
void CStuManage::print_good()
{
sort(vecs.begin(),vecs.end(),sortInforDesc());
int i = 1;
for(vector<CStuInfo*>::iterator it = vecs.begin(); it!= vecs.end(); ++it)
{
if(i > 3)
{
break;
}
(*it)->print_to_console(2);
i++;
}
cout << "\n***前三名学生信息输出完成***"<<endl;
}
// StuDemo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "CStuInfo.h"
#include "CStuManage.h"
int main(int argc, char* argv[])
{
int choice;
CStuManage *manage = new CStuManage;
cout<<"*************学生信息管理菜单*************"<<endl;
cout<<"* 1.录入学生信息 *"<<endl;
cout<<"* 2.文件读取学生信息 *"<<endl;
cout<<"* 3.输出学生成绩 *"<<endl;
cout<<"* 4.保存学生成绩 *"<<endl;
cout<<"* 5.输出前三名学生信息 *"<<endl;
cout<<"* 6.学生成绩排序 *"<<endl;
cout<<"* 0.退出 *"<<endl;
cout<<"*************学生信息管理菜单*************"<<endl;
while(true)
{
cout<<"请选择操作:";
cin>>choice;
switch(choice)
{
case 1:
manage->add_stu_infor();
break;
case 2:
manage->read_file();
break;
case 3:
manage->print_info_all();
break;
case 4:
manage->write_file();
break;
case 5:
manage->print_good();
break;
case 6:
cout<< "1->平均分从低到高排序 2->平均分从高到低排序 other->quite";
int a;
cin>>a;
if(a == 1)
{
manage->sort_infor(1);
}
else if(a == 2)
{
manage->sort_infor(2);
}
else
{
}
break;
case 0:
return 0;
default:
break;
}
}
return 0;
}
/*
stdafx.h文件没有列出来,在VC6.0下新建一个工程就有该内容
*/
新建一个VC6.0 控制台应用程序->将代码复制到对应的文件上->编译->运行即可追问运行后怎么出现错误?????c:\program files\microsoft visual studio\vc98\include\eh.h(32) : fatal error C1189: #error : "eh.h is only for C++!"
追答如果有需要可以加QQ:564777005 给你发完整源代码
热心网友
时间:2023-10-29 19:47
给我打个包票,我就给你写?
C语言编程题
根据题意:题目1:函数参数是除数(这里传值8),返回满足条件的数字和。题目2:函数参数是要找的项目数(这里传值10),返回对应项的值。include<stdio.h> define MIN 50 define MAX 1000 int fa(int a);//对应题目1的函数,参数:要除的数,返回可以被整除的数之和 int getByIndex(int n)...
问一道C语言编程的问题,看下图
按你的提问,每天都吃一半多两个,第6天剩一个。程序按图片中的程序照猫画虎即可。计算结果,第一天摘了156个桃子,而不是100个。include <stdio.h>int main(){int day,x1,x2;day=5;x2=1;while(day>0){x1=(x2+2)*2;x2=x1;day--;}printf("total=%d\n",x1);return 0;} 用数...
急求c语言编程题目
所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫...
C语言编程题目三道
:an=n1/n2;break; case '%':an=n1%n2;break; } printf("%d%c%d=%d\n",n1,f,n2,an);}include<stdio.h>#include<string.h>void count(char *str1,char *str2);int main(){ char str1[100]={0},str2[8]={0}; gets(str1); scanf("%s",str2); coun...
c语言编程题目求解
题目1:使用if多分支结构:c include<stdio.h> int main(){ int score;printf("请输入学生的成绩:\n");scanf("%d", &score);if(score>=90 && score<=99){ printf("学生的成绩等级为A\n");}else if(score>=80 && score<=89){ printf("学生的成绩等级为B\n");}else if(score>=...
C语言编程:如下要求的题目咋写代码?
代码文本:include "stdio.h"int max(int a[],int n,int *p){ for(n--,*p=0;n>=0;n--)if(a[*p]=0;n--)if(a[*p]>a[n])p=n;return a[*p];} int main(int argc,char *argv[]){ int a[20]={13,19,12,9,10,3,7,18,1,11,20,8,2,14,15,16,4,5,6,17},ma...
c语言编程100题,有没有大神帮帮忙
您好,c语言经典100题:【程序1】题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列.2.程序源代码:main(){ int i,j,k;printf("\n");for(i1;i<5;i++)/*...
c语言编程题?
C语言编程题 1.(*)求分数序列:1/2,2/3,3/5,5/8,8/13,13/21... 前20项的和。main(){float i=1,j=2,t=0,s,n,m;for(n=1;n<=20;n++)s=i/j,m=i,i=j,j=m+j,t=t+s;printf("t=%f",t);} 2.(*)从键盘输入一个字符串,再将其逆序输出。(如:输入abcde...
[急求助]C语言程序编程题,请高手帮忙解答下!
按照题目要求编写的程序如下(见图)
C语言编程问题:求 1!+2!+3!+...+n!
把sum=sum+x;移到}后、x=1;前。int main(void){ int sum,n,x,t;scanf("%d",&n);for(sum=0,x=t=1;t<=n;sum+=x*=t++);printf("%d\n",sum);return 0;}