设计题目:成绩管理系统
有学生成绩信息,内容如下
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47
…. .. .. .. …
A、功能要求:
(1) 信息维护:
要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。
此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
(2) 信息查询:
要求:查询时可实现按姓名查询、按学号查询
(3) 成绩统计:
要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),
统计出在此分数段的学生情况。
(4) 排序:能对用户指定的任意课程名,
按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)
以前做的一个程序,基本符合你的要求,你可以自己改一下。
---------By kuaidh00 ---2008/01/07----------
**********************************************/
//链表的练习。
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
struct List
{
string m_Name;
string m_ID;//可能有的学号里有字母,所以用string类型。
short int m_Chinese;
short int m_Match;
short int m_English;
struct List *Next; //指针域。
};
typedef struct List Node;
typedef Node *Link;
//---------------函数声明-------------------
Link Create(Link Head);
Link Search(Link Head);
Link Search_front(Link Head);
void Release(Link Head);
void Display(Link Head);
void Display_One(Link Head);
void Display(Link Head,fstream& ofile);
Link AddInfo(Link Head);
Link DelInfo(Link Head);
Link Modify(Link Head);
void Grade_Stat(Link Head);
Link Sort(Link Head);
//---------------函数实现-------------------
Link Create(Link Head)
{
/*构造一个头节点*/
Head=(Link)new Node;
if(!Head)
{
cout<<"分配内存失败。"<<endl;
exit(-1);
}
Head->m_Name="";
Head->m_ID="";
Head->m_Chinese=0;
Head->m_Match=0;
Head->m_English=0;
Head->Next=NULL;
return Head;
}
Link Search(Link Head)
{
cout<<" 1.按姓名查询 2.按学号查询 "<<endl;
int select;
cin>>select;
while(cin.fail())
{
cout<<"请选择正确的菜单项:";
cin.clear();
fflush(stdin);
cin>>select;
}
Link ptr;
ptr=Head;
if(select==1)
{
string name;
cout<<"请输入要查询的姓名:";
cin>>name;
while(ptr!=NULL)
{
if(ptr->m_Name==name)
{
Display_One(ptr);
return ptr;
}
ptr=ptr->Next;
}
cout<<"没找到,怎么办?"<<endl;
}
else if(select==2)
{
string ID;
cout<<"请输入要查询的学号:";
cin>>ID;
while(ptr!=NULL)
{
if(ptr->m_ID==ID)
{
Display_One(ptr);
return ptr;
}
ptr=ptr->Next;
}
cout<<"没找到,怎么办?"<<endl;
}
return ptr;
}
Link Search_front(Link Head)
{//返回前驱节点。
cout<<" 1.按姓名删除 2.按学号删除 "<<endl;
int select;
cin>>select;
while(cin.fail())
{
cout<<"请选择正确的菜单项:";
cin.clear();
fflush(stdin);
cin>>select;
}
Link ptr;
Link front;
ptr=Head->Next;
front=Head;
if(select==1)
{
string name;
cout<<"请输入要删除的姓名:";
cin>>name;
while(ptr!=NULL)
{
if(ptr->m_Name==name)
{
Display_One(ptr);
return front;
}
ptr=ptr->Next;
front=front->Next;
}
cout<<"没找到,怎么办?"<<endl;
}
else if(select==2)
{
string ID;
cout<<"请输入要删除的学号:";
cin>>ID;
while(ptr!=NULL)
{
if(ptr->m_ID==ID)
{
Display_One(ptr);
return front;
}
ptr=ptr->Next;
front=front->Next;
}
cout<<"没找到,怎么办?"<<endl;
}
return front;
}
void Release(Link Head)
{
Link ptr;
while(Head!=NULL)
{
ptr=Head;
Head=Head->Next;
delete ptr;
}
}
void Display(Link Head)
{
Link ptr;
ptr=Head->Next;
cout<<"----------------------------------------------------------------------"<<endl;
cout<<"---------------------------- 所有学生信息 --------------------------"<<endl;
cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"<<endl;
while(ptr!=NULL)
{
cout<<setw(15)<<left<<ptr->m_Name
<<setw(15)<<left<<ptr->m_ID
<<setw(15)<<left<<ptr->m_Chinese
<<setw(15)<<left<<ptr->m_Match
<<setw(15)<<left<<ptr->m_English<<endl;
ptr=ptr->Next;
}
}
void Display(Link Head,fstream& ofile)
{
Link ptr;
ptr=Head->Next;
ofile<<"----------------------------------------------------------------------"<<endl;
ofile<<"---------------------------- 所有学生信息 --------------------------"<<endl;
ofile<<"---姓名--------学号-----------语文-----------数学-----------英语------"<<endl;
while(ptr!=NULL)
{
ofile<<setw(15)<<left<<ptr->m_Name
<<setw(15)<<left<<ptr->m_ID
<<setw(15)<<left<<ptr->m_Chinese
<<setw(15)<<left<<ptr->m_Match
<<setw(15)<<left<<ptr->m_English<<endl;
ptr=ptr->Next;
}
}
void Display_One(Link Head)
{
Link ptr;
ptr=Head;
cout<<"----------------------------------------------------------------------"<<endl;
cout<<"---------------------------- 查询结果信息 --------------------------"<<endl;
cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"<<endl;
cout<<setw(15)<<left<<ptr->m_Name
<<setw(15)<<left<<ptr->m_ID
<<setw(15)<<left<<ptr->m_Chinese
<<setw(15)<<left<<ptr->m_Match
<<setw(15)<<left<<ptr->m_English<<endl;
}
Link AddInfo(Link Head)
{
Link ptr;
ptr=Head;
while(ptr->Next!=NULL)
{
ptr=ptr->Next;
}
Link ptr2;
char again;
do
{
ptr2=(Link)new Node;
if(!ptr2)
{
cout<<"内存分配失败!"<<endl;
exit(-1);
}
//数据域
string Name,ID;
short int Chinese,Match,English;
cout<<"输入姓名:";
cin>>Name;
cout<<endl<<"输入学号:";
cin>>ID;
cout<<endl<<"语文成绩:";
cin>>Chinese;
cout<<endl<<"数据成绩:";
cin>>Match;
cout<<endl<<"英语成绩:";
cin>>English;
ptr2->m_Name=Name;
ptr2->m_ID=ID;
ptr2->m_Chinese=Chinese;
ptr2->m_Match=Match;
ptr2->m_English=English;
//指针域
ptr2->Next=NULL;//作为尾节点。
ptr->Next=ptr2;//连接入链表。
ptr=ptr2;//将ptr2作为下一次产生的节点的前驱节点.
cout<<"是否继续输入?(Y/N) ";
cin>>again;
}while(again=='Y'||again=='y');
return Head;
}
Link DelInfo(Link Head)
{
Link ptr;
Link ptr2;
ptr=Head;
Link f_ptr;//前驱节点。
f_ptr=Search_front(ptr);
ptr2=f_ptr->Next;
f_ptr->Next=f_ptr->Next->Next;
delete ptr2;
return Head;
}
Link Modify(Link Head)
{
Link ptr;
ptr=Head;
ptr=Search(ptr);
cout<<"修改前信息为:"<<endl;
Display_One(ptr);
//cout<<"请选择你要修改的选项:A:姓名 B:学号 C:语文成绩 D:数学成绩 E:英语成绩"<<endl;
string name,ID;
float Chinese,Match,English;
cout<<"输入新姓名:";
cin>>name;
cout<<endl<<"输入新学号:";
cin>>ID;
cout<<endl<<"输入新语文成绩:";
cin>>Chinese;
cout<<endl<<"输入新数学成绩:";
cin>>Match;
cout<<endl<<"输入新英语成绩:";
cin>>English;
ptr->m_Name=name;
ptr->m_ID=ID;
ptr->m_Chinese=Chinese;
ptr->m_Match=Match;
ptr->m_English=English;
cout<<endl<<"修改后信息为:"<<endl;
Display_One(ptr);
return Head;
}
void Grade_Stat(Link Head)
{//成绩统计。
Link ptr;
ptr=Head;
cout<<"请输入你要查询的课程名(chinese|match|english)和一个分数范围[min,max]."<<endl;
string name;
short int min,max;
int SwitchNum;
cout<<"课程名:";
cin>>name;
cout<<endl<<"分数下限:";
cin>>min;
cout<<endl<<"分数上限:";
cin>>max;
if(name=="chinese")
SwitchNum=1;
else if(name=="match")
SwitchNum=2;
else if(name=="english")
SwitchNum=3;
else
{
cout<<"请输入一个正确的课程名:"<<endl;
return;
}
while(ptr!=NULL)
{
switch(SwitchNum)
{
case 1:
if(ptr->m_Chinese<=max&&ptr->m_Chinese>=min)
Display_One(ptr);
break;
case 2:
if(ptr->m_Match<=max&&ptr->m_Match>=min)
Display_One(ptr);
break;
case 3:
if(ptr->m_English<=max&&ptr->m_English>=min)
Display_One(ptr);
}
}
}
Link Sort(Link Head)
{//我创建的是带头节点的链表。用直接插入法。
cout<<"请输入你想排序的课程名(用中文):";
string course_name;
cin>>course_name;
if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。
{
cout<<"数据节点数少于2个,不用排序!"<<endl;
return Head;
}
//-----------第二步;
Link ptr;
Link ptr_F;
Link ptr_N;
ptr=Head->Next->Next;
ptr_F=Head;
Head->Next->Next=NULL;//到此,分成了两个链表。
//第三步。
while(ptr)
{
ptr_N=ptr->Next;
ptr_F=Head;//ptr_F的归位。
while(ptr_F->Next)
{
if(course_name=="语文")
{
if(ptr->m_Chinese>ptr_F->Next->m_Chinese)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F->Next;
}
}
if(course_name=="数学")
{
if(ptr->m_Match>ptr_F->Next->m_Match)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F->Next;
}
}
if(course_name=="英语")
{
if(ptr->m_English>ptr_F->Next->m_English)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;
break;
}//if
else
{
ptr_F=ptr_F->Next;
}
}
}//while(ptr_F->Next)
if(ptr_F->Next==NULL)
{
ptr->Next=ptr_F->Next;
ptr_F->Next=ptr;//表示插到有序链表的最后面了。
}
ptr=ptr_N;//归位,准备下一次排序。
}//while(ptr)
cout<<"从高到低,排序成功!"<<endl;
return Head;
}
//----------主函数----------------------
int main()
{
fstream ofile;
ofile.open("e:\\student.txt",ios_base::out);
if(!ofile)
{
cout<<"文件打开失败。"<<endl;
exit(-1);
}
Link head=0;
head=Create(head);
while(1)
{
cout<<"*****************************************************"<<endl;
cout<<"*** 1.添加信息 2.修改信息 3.删除信息 4.信息查询 ***"<<endl;
cout<<"*** 5.成绩统计 6.排 序 7.显示/保存 0.退 出 ***"<<endl;
cout<<"*****************************************************"<<endl;
cout<<"请选择正确的菜单项:";
int sel;
cin>>sel;
while(cin.fail())
{
cout<<"请选择正确的菜单项:";
cin.clear();
fflush(stdin);
cin>>sel;
}
switch(sel)
{
case 0:
exit(0);
case 1:
head=AddInfo(head);
break;
case 2:
head=Modify(head);
break;
case 3:
head=DelInfo(head);
break;
case 4:
Search(head);
break;
case 5:
Grade_Stat(head);
break;
case 6:
Sort(head);
break;
case 7:
Display(head);//在标准显示器上显示。
Display(head,ofile);//在文件中显示。
break;
default:
break;
}
}
Release(head);
return 0;
}
温馨提示:内容为网友见解,仅供参考
跪求C++程序设计语言? 第1-3部分,有人帮我找找这书籍嘛?谢谢啦_百度知 ...
https:\/\/pan.baidu.com\/s\/1d5MYF1Y8FeYUPzx9ffmKNQ 提取码:1234 《C++程序设计语言》(原书第4版)是C++领域经典的参考书,介绍了C++11的各项新特性和新功能。全书共分四部分。部分(第1~5章)是引言,包括C++的背景知识,C++语言及其标准库的简要介绍;第二部分(第6~15章)介绍C++的内置类...
c++程序设计内容简介
第一章简述C++语言的发展历程与演变,包括编译器和集成开发环境的使用,以及如何编写、编译和运行程序。第二章详细介绍了C++的基本数据类型,常量、变量以及运算符和表达式的使用方法。第三章深入探讨数组和指针的概念,包括初始化和使用方法,同时介绍了标准库中的string和vector类型。第四章详细讲解C++程序...
谁有C++程序设计(第3版),求分享教材的网盘资源呗~
https:\/\/pan.baidu.com\/s\/1oEg7HoxM9UwbBTRHBk-07A 提取码:1234 《C++程序设计(第3版)》是2015年清华大学出版社出版的计算机专业书籍。本书参照ACM和IEEE CS CC2013以及教育部高等学校计算机类专业教学指导委员会编制的《高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)》的要求,...
求完整C语言程序设计报告!!
要求:一、课程设计的性质和目... 实验题目:编写函数实现删除字符串中的特定字符,例如原字符串为“turbo c and borland c++”,从键盘输入字符“n”,则输出后变为“turbo c and borlad c++”。要求:一、课程设计的性质和目的二、需求分析:1、程序的功能。2、输入输出的要求。三、算法分析:四、流程图:五、源...
用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++程序设计
求第一天共摘了多少。1.程序分析:采取逆向思维的方法,从后往前推断。2.程序源代码:main(){ int day,x1,x2;day=9;x2=1;while(day〉0){x1=(x2+1)*2;\/*第一天的桃子数是第2天桃子数加1后的2倍*\/ x2=x1;day--;} printf(“the total is %d\\n“,x1);} ...
...用C语言或C++编写的相亲数程序设计 要求为完整的程序(一个系统)一...
if(a==num[i]) \/\/若一对相亲数的大一点的数已经找到了,就不用再列出来了 { flag=1;break;} if(flag==1)continue;if(sum2==a && sum1!=a) \/\/若两个数满足相亲数,且不相等 { printf("%ld和%ld是一对相亲数\\n",a,sum1);num[cnt]=sum1; \/\/将第二个相亲数存入数组...
跪求一份C++的程序设计报告感想
通过完成本次面向对象程序设计的任务,使我熟练和掌握了这学期所学的有关visual c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。面向对象程序设计作为一门软件设计的课程,具有...
C++程序设计求解
include "stdio.h"int main(){int N;int a[100],sum;int i;sum=0;printf("输入金矿数:");scanf("%d",&N);printf("输入%d个金矿各自可收获的金币数:",N);for(i=0;i<N;i++){scanf("%d",&a[i]);if(a[i]>1000)sum=sum+a[i]-1000;}printf("剩余金币数:%d",sum);} ...
计算机程序设计语言C++题目,求思路和结果
第一个知识点是逗号运算符。(c=a++, b+++a)的结果是先计算c=a++,然后使用b+++a的值作为最终结果。三个+放在一起,那一定是一个+号,和一个自增运算符++放在一起了,至于具体怎么解释需要知道运算符优先级。大多数运算符是从左到右,所以应该解释为(b++) + a。所以,c=a++使得c=0,a...