|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
C++成绩管理
成绩记录薄,每个学生信息包括:学号、姓名、成绩
实现的功能:
输入学生成绩
按学号或姓名查询成绩
添加成绩记录
修改指定姓名的学生成绩
显示输出60分以下,60~79,80~89,90分以上各分数段的学生信息。
找出最低成绩和最高成绩
计算平均分
#include <iomanip>
#include <iostream>
#include <fstream>
#include <vector>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct student //相当于类的公有类型
{
char name[10]; /// 姓名
char xuehao[10]; /// 学号
float score; /// 分数
student *next;
};
///////////-------定义类-----------------------////////////
class studentmassage
{
student *p1,*p2,*end,*head;
public:
~studentmassage() /////----析构函数------------------------
{
while(head)
{
p1=head->next;
delete head;
head=p1;
}
}
//成员函数
void ShowMenu(); //菜单
void Input(student *p); //输入学生信息
student *find(student *head,char *p); //按照学号或姓名查询学生成绩记录(可查找多个同名数据)
void findgd(); // 找出最低成绩和最高成绩
student *input(student *head); // 增加学生成绩记录
student *showfs(student *head); //显示输出学生分数段信息
void average(); //计算平均分
friend void total(student*head);
//student *getNext(){return next;}
student *insert(student *head); //修改成绩
student*Inputs(); //用于添加数据的子函数
void output (student *head);
void delay()
{
int n = 1000000000;
while (n--)
;
}
student *FindItem(char * name) //查找姓名
{
for (student * p = head; p->next != end; p = p->next)//匹配成功则返回上一个指针,不成功就返回空
if (!strcmp(p->next->name, name))return p;
return NULL;
}
student *FindID(char * xuehao) //查找学号
{
for (student * p = head; p->next != end; p = p->next)//匹配成功则返回上一个指针,不成功就返回空
if (!strcmp(p->next->xuehao, xuehao))return p;
return NULL;
}
};//----------------------------------------------------
void studentmassage::ShowMenu() //菜单
{
cout << "********************************************************************************" << endl;
cout << "〓〓〓〓〓〓〓〓〓〓 ☆ 学 生 成 绩 管 理 系 统 ☆ 〓〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓★★★★★ ★★★★★★★ ★★★★★〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 1.输入学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 2.按照学号或姓名查询成绩☆★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 3.添加成绩记录 ☆ ★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 4.修改指定姓名的学生成绩☆★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 5.显示输出60分以下,60-79,80-89,90分以上各分数段的学生信息☆★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 6.找出最低成绩和最高成绩☆★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 7.计算平均分 ☆ ★〓〓〓〓〓〓〓〓〓" << endl;
cout << "〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系统 ☆ ★〓〓〓〓〓〓〓〓〓" << endl;
cout << "\n\t\t\n\t\t请选择:";
}
////----------------///////
void studentmassage::Input(student *p)//输入学生成绩
{
cout<<setw(6)<<"姓名"<<setw(8)<<" 学号"<<setw(8)<<"c++"<<endl;
cin>>p->name >>p->xuehao;
cin >>p->score;
}
void studentmassage::output (student *head)//用于输出
{ p1=head;
while(p1!=NULL)
{
cout<<setw(6)<<p1->name<<setw(8)
<<p1->xuehao<<setw(8)<<p1->score<<endl;
p1=p1->next ;
}
}
student*studentmassage::find(student *head,char *p) //按照学号或姓名查询学生成绩记录
{
char name[10], xuehao[10];
int x;
student * p = NULL;
cout << "\n\t\t*********************************\n";
cout << "\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
cout << "\n\t\t*********************************\n请选择:";
cin >> x;
switch (x)
{
case 1:{cout << "\t\t请输入要查找的学生的姓名:"; cin >> name;
if (p = FindItem(name))
{
p->Next->output();
delay();
cout << "输入任意字符!继续……";
getchar();
}
else
{
cout << "\t\t没有找到该姓名的学生!" << '\n' << endl;
delay();
cout << "输入任意字符!继续……";
getchar();
}
}break;
case 2:
{
cout << "\t\t请输入要查找的学生的学号:"; cin >> xuehao;
if (p = FindID(xuehao))
{
p->Next->output();
delay();
cout << "输入任意字符!继续……";
getchar();
}
else
{
cout << "\t\t没有找到该学好的学生!" << '\n' << endl;
delay();
cout << "输入任意字符!继续……";
getchar();
}
}break;
}
}
student *studentmassage::input(student *head) // 增加学生成绩记录
{ p1=new student; //动态分配内存
p2=head;
Input(p1); //调用函数 增加数据
if(head ==NULL)
{
head=p1;
p1->next =NULL;
return head;
}
while(p2->next !=NULL)
p2=p2->next;
p2->next=p1;
p1->next=NULL;
cout << "添加成功!" << endl;
cout << "输入任意字符(按任意键)!继续……";
getchar();
return head;
}
student* studentmassage::insert(student *head) //修改指定姓名的学生成绩
{
char name1[10];
student *p = NULL;
cout << "\t\t请输入要修改的人的姓名:"; cin >> name1;
if (p=FindItem(name1)) //调用查找函数
{
cout << "\t\t已找到学生的信息,请输入新的成绩!" << endl;
Input(p); //调用输入函数
cout << "修改成功!" << endl;
cout << "输入任意字符!继续……";
getchar();
}
else
{
cout << "\t\t没有找到!" << endl;
cout << "输入任意字符!继续……";
getchar();
}
return head;
}
student* studentmassage::insert(student *head) //修改指定姓名的学生成绩
{
char name1[10];
student * p = NULL;
cout << "\t\t请输入要修改的人的姓名:"; cin >> name1;
if (p=FindItem(name1)) //调用查找函数
{
cout << "\t\t已找到学生的信息,请输入新的成绩!" << endl;
p->next->Input(p); //调用输入函数
cout << "修改成功!" << endl;
cout << "输入任意字符!继续……";
getchar();
}
else
{
cout << "\t\t没有找到!" << endl;
cout << "输入任意字符!继续……";
getchar();
}
return head;
}
student *studentmassage::showfs(student *head) //显示输出学生分数段信息
{
int n=0;
char ch;
cout<<"A->60分以下;B->60~70分之间;C->70~80分之间;D->80~90分之间;E->90~100分之间:"<<endl; cin>>ch;
switch(ch)
{
case 'A':while(head)
{
if(head->score<=60) {head->Input();n++;} head=head->next();break;
}
case 'B':while(head)
{
if(head->score>60&&head->score<=70) {head->Input();n++;} head=head->next;break;
}
case 'C': while(head)
{
if(head->score>70&&head->score<=80) {head->Input();n++;} head=head->next;break;
}
case 'D': while(head)
{
if(head->score>80&&head->score<=90) {head->Input();n++;} head=head->next;break;
}
case 'E': while(head)
{
if(head->score>90&&head->score<=100) {head->Input();n++;} head=head->next;break;
}
default:
cout<<"该分段内没有您要找的学生信息!"<<endl;
}
cout << "输入任意字符!继续……";
getchar();
return head;
}
void studentmassage::average()//计算平均分
{
student *p1=next;//student链表头指针赋给p1
double count=0;
double sum;
if(p1==NULL)
cout<<"无学生信息!"<<endl;
else
{
while(p1)
{
count++;
sum=sum+p1->score;
p1=p1->next;
}
cout<<"\n\t\t平均分:"<<(sum/count)<<endl;
}
getchar();
}
void studentmassage::findgd()//显示最高分和最低分
{
student *p1=next;//student链表头指针赋给p1
double count=0;
double max=0,min=0;
if(p1==NULL)
cout<<"无学生信息!"<<endl;
else
{
while(p1)
{
count++;
if(p1->score>max)max=p1->score;
else min=p1->score;
p1=p1->next;
}
cout<<"\n\t\t最高分: "<<max<<endl;
cout<<"\n\t\t最低分: "<<min<<endl;
}
getchar();
}
void error()
{
cout<<"错误,这还是一个空系统,请输入数据"<<endl;
getchar();
}
///////////////////------------main函数--------//////////////////-----------
int main(void)
{
studentmassage stus;
student *head=NULL;
student *pd; //临时指针, 用于查找函数
char choice; //用于存放用户的选择项
char name[10]; //查找,删除记录的 key
stus.ShowMenu();
int n=0;
cin>>choice;
if(choice=='0') //安全退出
{ cout<<"谢谢使用,再见"<<endl;
exit(0);
}
switch(choice)
{
case '1':
head=stus.Input(head); break;
case '5':
if(head==NULL)
{
error();
break;
}
cout<<head->xuehao<<"学号"<<head->name<<" 姓名"
<<head->score<<"c++分数"<<endl;
stus.showfs(head);
getchar();break;
case '7':
if(head==NULL)
{
error();
break;
}
//stus.average(head);
stus.average();
getchar();break;
case '2':
if(head ==NULL)
{
error(); //调用函数输出错误信息
break;
}
cout<<"请输入想要查找的学生姓名"<<endl;
cin>>name;
pd=head;
cout<<head->xuehao<<"学号"<<head->name<<" 姓名"
<<head->score<<"c++分数"<<endl;
while(pd) // 循环调用函数, 用于输出多个的同名学生成绩
{
pd=stus.find (pd,name);
if(pd==NULL)
break;
pd=pd->next ; //指针指向当前以找到的下一个节点,用于查找多个学生
}
getchar();
break;
case '4':
if(head==NULL)
{
error();
break;
}
cout<<"请输入想要删除学生姓名"<<endl;
cin>>name;
head=stus.insert(head);
getchar();
break;
case '3':
if(head==NULL)
{
error();
break;
}
stus.findgd();
head=stus.input(head);
break;
case '6':
if(head==NULL)
{
error();
break;
}
stus.findgd();
cout<<"最高分和最低分"<<endl;
getchar();break;
default :
cout<<" 对不起,您的输入有误,请重新输入。\n";
getchar(); break;
}
getchar();
return 0;
}
|
|