student-0

问题描述:学生成绩统计系统 本篇文章给大家谈谈student01122,以及student0731,希望对各位有所帮助,不要忘了收藏本站喔。

c语言交换结构体

student-0的相关图片

/******************************************************。

* Last Revision Date : 2011/07/6 10:35:27 。

* Author : zengjinliang。

* Description : 简单学生成绩处理系统。

*******************************************************/。

#include<vector>。

#include<iostream>。

#include<string>。

#include<sstream>。

#include<fstream>。

#include<ctime>。

using namespace std;。

typedef int scoreType;。

const string DATAFILE="testdata.txt";。

const string RESULTFILE="result.txt";。

const scoreType ERRORCode=-999;。

//转换失败,则返回ERRORCode。

scoreType string_to_scoreType(const string& word)。

scoreType Sum = ERRORCode;。

stringstream ss;。

ss<<word;。

ss>>Sum;。

return Sum;

}

string scoreType_to_string(const scoreType integer)。

stringstream ss;。

string str;

ss<<integer;。

ss>>str;。

return str;

}

//学生信息节点

class TStudentInfo{。

public:

int getsOrder() {return sOrder;}。

string getsId() {return sId;}。

string getsName() {return sName;}。

string getsClass() {return sClass;}。

scoreType getsAvgScore() {return sAvgScore;}。

scoreType getsMidScore() {return sMidScore;}。

scoreType getsFinalScore() {return sFinalScore;}。

string getsTotalScore() {return sTotalScore;}。

string str() {。

string sTmp;。

stringstream stream;。

stream<<sOrder<<" "; 。

stream<<sId<<" "; 。

stream<<sName<<" "; 。

stream<<sClass<<" "; 。

stream<<sAvgScore<<" "; 。

stream<<sMidScore<<" "; 。

stream<<sFinalScore;。

if (""!=sTotalScore)。

stream<<" "<<"综合成绩:"<<sTotalScore;。

getline(stream,sTmp);。

return sTmp;。

}

//计算总评成绩

bool caculateTotalScore();。

TStudentInfo(){}。

bool setStudentInfo(string sInfo);。

TStudentInfo(string sInfo){。

setStudentInfo(sInfo); 。

}

TStudentInfo(int aOrder,string aId,string aName,string aClass,。

scoreType aAvgScore,scoreType aMidScore=-1,scoreType aFinalScore=-1):。

sOrder(aOrder),sId(aId),sName(aName),sClass(aClass),。

sAvgScore(aAvgScore),sMidScore(aMidScore),sFinalScore(aFinalScore){}。

virtual ~TStudentInfo() {}。

private:

int sOrder; //序号。

string sId; //学号。

string sName; //姓名。

string sClass; //班级。

scoreType sAvgScore; //平时成绩。

scoreType sMidScore; //期中成绩。

scoreType sFinalScore; //期末成绩。

string sTotalScore; //总评成绩。

};

typedef TStudentInfo TSInfo;。

typedef struct TStudentNode{。

TSInfo *aStudent;。

TStudentNode *next;。

} *TSptr;

class TScoreInfo{。

public:

bool printScore();。

bool printStatistics();。

bool saveResult();。

bool clear();。

bool fileList();。

bool insertList(TSptr newPtr);。

TScoreInfo():stateFlag(0),absentNum(0),。

sMaxScore(0),sMinScore(0),sTotalScore(0){。

list = new TStudentNode;。

list->aStudent = new TSInfo();。

list->next = 0;。

for (int i=0;i<5;i++) scores[i] = 0;。

}

~TScoreInfo(){。

clear();

delete(list->aStudent);。

list->aStudent=0;。

delete(list);}。

private:

int absentNum; //缺考人数。

int passNum; //及格人数。

TStudentNode *list; //指向学生的链表,自带空头指针。

int scores[5]; //存储期末成绩分数段人数分布。

scoreType aAvgScore;。

double aPassRate; 。

scoreType sMaxScore; 。

scoreType sMinScore;。

scoreType sTotalScore;。

//0新建、1已装载数据并处理。

int stateFlag;。

bool dealNode(TSInfo *aInfo){。

scoreType sFScore=aInfo->getsFinalScore(); 。

if (sFScore<0) return false;。

else if (sFScore<60) scores[0]++;。

else if (sFScore<70) scores[1]++;。

else if (sFScore<80) scores[2]++;。

else if (sFScore<90) scores[3]++;。

else scores[4]++;。

sTotalScore += sFScore;。

if (sFScore>sMaxScore) sMaxScore=sFScore;。

if (sFScore<sMinScore) sMinScore=sFScore;。

}

};

int main(){

TScoreInfo si;。

si.fileList();。

si.printScore();。

si.printStatistics();。

cout<<"The End!"<<endl;。

si.saveResult();。

return 0;

}

bool TStudentInfo::caculateTotalScore(){。

scoreType iTmp(0);。

if (-1==sFinalScore){。

sTotalScore = "旷考";。

return false;}。

if ((0<sMidScore)&&(100>sMidScore)){。

iTmp = (10*sAvgScore + 30*sMidScore + 60*sFinalScore)/100;。

sTotalScore=scoreType_to_string(iTmp);}。

else {

iTmp = (30*sAvgScore + 70*sFinalScore)/100;。

sTotalScore=scoreType_to_string(iTmp);}。

return true;

}

bool TStudentInfo::setStudentInfo(string sInfo){。

istringstream stream(sInfo);。

sAvgScore = -1;。

sMidScore = -1;。

sFinalScore=-1;。

stream>>sOrder; 。

stream>>sId; 。

stream>>sName; 。

stream>>sClass; 。

stream>>sAvgScore; 。

stream>>sMidScore; 。

stream>>sFinalScore; 。

bool TScoreInfo::printScore(){。

if (!stateFlag) return false;。

int scnt=0;

for (int i=0;i<5;i++) scnt+=scores[i];。

aPassRate = (double)(scnt-scores[0])/scnt;。

aAvgScore = sTotalScore/scnt;。

cout<<"共读取了"<<scnt<<"个学生的数据!其中旷考"<<absentNum。

<<"人,其余成绩如下:"<<endl;。

cout<<"序号,学号,姓名,班级,平时成绩,其中成绩,期末成绩,总评成绩。"<<endl;。

TSptr p=list->next;。

while(0!=p){

cout<< p->aStudent->str()<<endl;。

p=p->next;。

}

return true;

bool TScoreInfo::printStatistics(){。

int i;

if (!stateFlag) return false;。

cout<<endl<<"期末成绩按分数段进行划分:"<<endl;。

cout<<"0~59、60~69、70~79、80~89、90~100的人数各有(人):";。

for (i=0;i<5;i++)。

cout<<scores[i]<<" ";。

cout<<endl<<"分布图如下:"<<endl;。

//分布图待续、判断正态分布待续。

cout<<"此次期末及格率:"<<aPassRate<<endl;。

cout<<"平均分:"<<aAvgScore<<endl;。

cout<<"最高分:"<<sMaxScore<<endl;。

cout<<"最低分:"<<sMinScore<<endl;。

bool TScoreInfo::clear(){。

TSptr p=list->next;。

int j=0;

while(0!=p){

list->next = p->next;。

delete(p->aStudent);。

delete p;

p=list->next; 。

}

list->next=0;。

stateFlag = 0;。

for (int i=0;i<5;i++) scores[i] = 0;。

sMaxScore = 0; 。

sMinScore = 0;。

sTotalScore = 0;。

absentNum=0;

bool TScoreInfo::fileList(){。

ifstream sfile;。

string sSInfo;。

clear();

sfile.open(DATAFILE.c_str(),ifstream::in);。

if (!sfile.is_open()){。

cout<<"Can't open datafile!Please check the existence of this file!"<<endl;。

return false;}。

//读取第一行的标题行

getline(sfile,sSInfo);。

//读取数据

getline(sfile,sSInfo);。

while(!sfile.eof()){。

TSptr p=new TStudentNode;。

p->aStudent= new TSInfo(sSInfo);。

p->next = 0;。

p->aStudent->caculateTotalScore();。

dealNode(p->aStudent);。

insertList(p);。

getline(sfile,sSInfo);。

}

sfile.close(); 。

stateFlag=1;

return true;

bool TScoreInfo::insertList(TSptr newPtr){。

if (!newPtr) return false;。

scoreType iTScore = string_to_scoreType(newPtr->aStudent->getsTotalScore());。

if (ERRORCode!=iTScore) {。

TSptr p=list->next;。

TSptr q=list;。

while((0!=p)&&(iTScore <= string_to_scoreType(p->aStudent->getsTotalScore()))){。

q = p;

p = p->next;。

}

newPtr->next = p;。

q->next = newPtr; 。

}

else absentNum++;。

bool TScoreInfo::saveResult(){。

fstream sfile;。

string sSInfo;。

time_t now_time=time(NULL);。

char tmp[64];

strftime(tmp, sizeof(tmp),"%Y/%m/%d %a",localtime(&now_time)); 。

sfile.open(RESULTFILE.c_str(),ofstream::out|ofstream::app);。

if (!sfile.is_open()){。

cout<<"Can't write resultfile!Please check the existence of this file!"<<endl;。

return false;}。

sfile<<"****************************************"<<endl;。

sfile<<"Date: "<<tmp<<endl;。

sfile.close();。

//重定位屏幕输出到文件输出。

freopen(RESULTFILE.c_str(), "a+", stdout);。

printScore();

printStatistics();。

cout<<"****************************************"<<endl;。

return true;

c++学生成绩管理系统 求代码 急急急的相关图片

c++学生成绩管理系统 求代码 急急急

#include<stdio.h>。

struct stu

{

long num;

*student[2];

void main()

{

struct stu *a;。

student[0] = (struct stu*)malloc(sizeof(struct stu));。

student[0]->num=0;。

student[1] = (struct stu*)malloc(sizeof(struct stu));。

student[1]->num=1;。

a = student[0];。

student[0] = student[1];。

student[1] = a;。

printf("student[0].num=%d\n",student[0]->num);。

printf("student[1].num=%d\n",student[1]->num);。

C语言编程:文件student.txt文件中保存有学生的信息(最后一条全0的表示结束),含:学号(字符串 5位)、的相关图片

C语言编程:文件student.txt文件中保存有学生的信息(最后一条全0的表示结束),含:学号(字符串 5位)、

#include <iostream>。

#include <string>。

using namespace std;。

struct Student //声明一个名为student的结构体类型。

string name; //姓名。

long number; //学号。

double shuxue; //数学。

double yingyu; //英语。

double Cyuyan; //C语言。

double tiyu; //体育。

double ZF; //总分。

double PJF; //平均分。

};

class SYSTEM //声明类system。

{public:

SYSTEM(){n=0;} //构造函数。

void add();//添加。

void show();//显示。

void search();//查询。

void change();//修改。

void del();//删除。

void PX();//排序。

void rate();//及格率。

void MAX();//最高分。

void MIN();//最低分。

private:

Student stu[1000];//定义一个结构体类型student的变量stu,其最大值为100。

int n;

};

void SYSTEM::add()//添加。

cout<<"学号:"<<endl;。

cin>>stu[n].number;。

cout<<"姓名:"<<endl;。

cin>>stu[n].name;。

cout<<"数学:"<<endl;。

cin>>stu[n].shuxue;。

cout<<"英语:"<<endl;。

cin>>stu[n].yingyu;。

cout<<"C语言:"<<endl;。

cin>>stu[n].Cyuyan;。

cout<<"体育:"<<endl;。

cin>>stu[n].tiyu;。

stu[n].ZF= stu[n].shuxue+ stu[n].yingyu+ stu[n].Cyuyan+ stu[n].tiyu;。

stu[n].PJF=( stu[n].shuxue+ stu[n].yingyu+ stu[n].Cyuyan+ stu[n].tiyu)/4;。

n++;//学生个数增加一个。

void SYSTEM::search()//查询。

cout<<"请选择查询方式:"<<endl;。

cout<<"1.按学号查询"<<endl; 。

cout<<"2.按姓名查询"<<endl; 。

int c,i;

cin>>c;

switch (c)

{

case 1://按照学号查询。

long num;

cout<<"请输入要查询的学号:"<<endl;。

cin>>num;。

for(i=0;i<n;i++) 。

if(stu[i].number==num)。

{ cout<<"学号 姓名 数学 英语 C语言 体育 总分 平均分"<<endl;。

cout<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].shuxue<<" "<<stu[i].yingyu<<" "<<stu[i].Cyuyan<<" "<<stu[i].tiyu<<" "<<stu[i].ZF<<" "<<stu[i].PJF<<endl;。

break; }

if(stu[i].number!=num)。

cout<<"未找到该学生信息!!"<<endl;。

break;}

case 2://按照学号查询。

string name1;

cout<<"请输入要查询的姓名:"<<endl;。

cin>>name1;。

for(i=0;i<n;i++) 。

if(stu[i].name==name1)。

{ cout<<"学号 姓名 数学 英语 C语言 体育 总分 平均分"<<endl;。

cout<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].shuxue<<" "<<stu[i].yingyu<<" "<<stu[i].Cyuyan<<" "<<stu[i].tiyu<<" "<<stu[i].ZF<<" "<<stu[i].PJF<<endl;。

break;}

if(stu[i].name!=name1)。

cout<<"未找到该学生信息!!"<<endl;。

break;}

void SYSTEM::show()//显示。

{ cout<<"学号 姓名 数学 英语 C语言 体育 总分 平均分"<<endl;。

for(int i=0;i<n;i++)。

{

cout<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].shuxue<<" "<<stu[i].yingyu<<" "<<stu[i].Cyuyan<<" "<<stu[i].tiyu<<" "<<stu[i].ZF<<" "<<stu[i].PJF<<endl;。

}

}

void SYSTEM::change() //修改。

{long num;

cout<<"请输入要修改的学生学号:"<<endl;。

cin>>num;。

for(int i=0;i<n;i++)。

if(stu[i].number==num)。

{cout<<"该学号的学生信息如下:"<<endl;。

cout<<"学号 姓名 数学 英语 C语言 体育 总分 平均分"<<endl;。

cout<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].shuxue<<" "<<stu[i].yingyu<<" "<<stu[i].Cyuyan<<" "<<stu[i].tiyu<<" "<<stu[i].ZF<<" "<<stu[i].PJF<<endl;。

cout<<"请输入新的学生信息:"<<endl;。

cout<<"学号:"<<endl;。

cin>>stu[i].number;。

stu[n].number=stu[i].number;。

cout<<"姓名:"<<endl;。

cin>>stu[i].name;。

stu[n].name=stu[i].name;。

cout<<"数学:"<<endl;。

cin>>stu[i].shuxue;。

stu[n].shuxue=stu[i].shuxue;。

cout<<"英语:"<<endl;。

cin>>stu[i].yingyu;。

stu[n].yingyu=stu[i].yingyu;。

cout<<"C语言:"<<endl;。

cin>>stu[i].Cyuyan;。

stu[n].Cyuyan=stu[i].Cyuyan;。

cout<<"体育:"<<endl;。

cin>>stu[i].tiyu;。

stu[n].tiyu=stu[i].tiyu;。

stu[i].ZF= stu[i].shuxue+ stu[i].yingyu+ stu[i].Cyuyan+ stu[i].tiyu;。

stu[i].PJF=( stu[i].shuxue+ stu[i].yingyu+ stu[i].Cyuyan+ stu[i].tiyu)/4;。

break;

}

if(stu[i].number!=num)。

cout<<"无此学生信息!!"<<endl;。

void SYSTEM::del() //删除。

long num;

cout<<"请输入要删除学生的学号,然后按回车确认:"<<endl;。

cin>>num;。

for(int i=0;i<n;i++)。

if(stu[i].number==num)。

{

for(int j=i;j<n-1;j++)。

stu[j]=stu[j+1];//用后一个学生信息覆盖前一个学生信息。

n--; //学生人数减少一个。

cout<<"已成功删除该学生信息!!"<<endl;break;。

}

void SYSTEM::PX() //排序。

{cout<<"请选择排序方式:"<<endl;。

cout<<"1.按学生总分排序"<<endl;。

cout<<"2.按学生平均分排序"<<endl;。

cout<<"3.返回"<<endl;。

int k;

cin>>k; 。

switch (k)

{

case 1://按学生总分排序。

Student p;

for(int i=0;i<n;i++)。

for(int j=0;j<n-i;j++)。

{

if(stu[j].ZF<stu[j+1].ZF)。

{

p=stu[j];。

stu[j]=stu[j+1];。

stu[j+1]=p;。

}

}

cout<<"学号 姓名 数学 英语 C语言 体育 总分"<<endl;。

for(int m=0;m<n;m++)。

{cout<<stu[m].number<<" "<<stu[m].name<<" "<<stu[m].shuxue<<" "<<stu[m].yingyu<<" "<<stu[m].Cyuyan<<" "<<stu[m].tiyu<<" "<<stu[m].ZF<<endl;。

}

}break;

case 2://按学生平均分排序。

{ Student p;//定义一个Student类型的变量p。

for(int i=0;i<n;i++)。

for(int j=0;j<n-i;j++)。

{

if(stu[j].PJF<stu[j+1].PJF)。

{

p=stu[j];。

stu[j]=stu[j+1];。

stu[j+1]=p;。

}

}

cout<<"学号 姓名 数学 英语 C语言 体育 平均分"<<endl;。

for(int m=0;m<n;m++)。

{cout<<stu[m].number<<" "<<stu[m].name<<" "<<stu[m].shuxue<<" "<<stu[m].yingyu<<" "<<stu[m].Cyuyan<<" "<<stu[m].tiyu<<" "<<stu[m].PJF<<endl;。

}

}break;

case 3:return;//返回。

}

void SYSTEM::rate()//及格率。

{ int count1, count2,count3,count4,count5=0;。

count1=count2=count3=count4=count5; 。

double a1;。

double a2;

double a3;

double a4;

double a5;

for(int i=0;i<n;i++)。

{if(stu[i].shuxue>=60)。

{count1++;

a1=((double)count1/(double)n)*100;//将int类型的count1和n强制转换成double类型再运算。

}

if(stu[i].yingyu>=60)。

{count2++;

a2=((double)count2/(double)n)*100;。

}

if(stu[i].Cyuyan>=60)。

{count3++;

a3=((double)count3/(double)n)*100;。

}

if(stu[i].tiyu>=60)。

{count4++;

a4=((double)count4/(double)n)*100;。

}

if(stu[i].PJF>=60)。

{count5++;

a5=((double)count5/(double)n)*100;。

}

}

cout<<"数学及格率:"<<a1<<"%"<<endl;。

cout<<"英语及格率:"<<a2<<"%"<<endl;。

cout<<"C语言及格率:"<<a3<<"%"<<endl;。

cout<<"体育及格率:"<<a4<<"%"<<endl;。

cout<<"学生平均分及格率:"<<a5<<"%"<<endl;。

void SYSTEM::MAX()//最高分。

{double max1,max2,max3,max4,max5,max6;。

max1=stu[0].shuxue;。

max2=stu[0].yingyu;。

max3=stu[0].Cyuyan;。

max4=stu[0].tiyu;。

max5=stu[0].ZF;。

max6=stu[0].PJF;。

for(int i=0;i<n;i++)。

{ if(stu[i].shuxue>max1)。

max1=stu[i].shuxue;。

if(stu[i].yingyu>max2)。

max2=stu[i].yingyu;。

if(stu[i].Cyuyan>max3)。

max3=stu[i].Cyuyan;。

if(stu[i].tiyu>max4)。

max4=stu[i].tiyu;。

if(stu[i].ZF>max5)。

max5=stu[i].ZF;。

if(stu[i].PJF>max6)。

max6=stu[i].PJF;。

}

cout<<"数学最高 英语最高 C语言最高 体育最高 总分最高 平均分最高"<<endl;。

cout<<" "<<max1<<" "<<max2<<" "<<max3<<" "<<max4<<" "<<max5<<" "<<max6<<endl; 。

}

void SYSTEM::MIN()//最低分。

{double min1,min2,min3,min4,min5,min6;。

min1=stu[0].shuxue;。

min2=stu[0].yingyu;。

min3=stu[0].Cyuyan;。

min4=stu[0].tiyu;。

min5=stu[0].ZF;。

min6=stu[0].PJF;。

for(int i=0;i<n;i++)。

{ if(stu[i].shuxue<min1)。

min1=stu[i].shuxue;。

if(stu[i].yingyu<min2)。

min2=stu[i].yingyu;。

if(stu[i].Cyuyan<min3)。

min3=stu[i].Cyuyan;。

if(stu[i].tiyu<min4)。

min4=stu[i].tiyu;。

if(stu[i].ZF<min5)。

min5=stu[i].ZF;。

if(stu[i].PJF<min6)。

min6=stu[i].PJF;。

}

cout<<"数学最低 英语最低 C语言最低 体育最低 总分最低 平均分最低"<<endl;。

cout<<" "<<min1<<" "<<min2<<" "<<min3<<" "<<min4<<" "<<min5<<" "<<min6<<endl; 。

}

void main()

SYSTEM person;。

int b;

do//do-while循环语句是先执行循环体里的语句,再进行判断,如果不符合while条件(即b<10)时要执行一次循环体,直到b的值大于或等于10是才退出循环。

{

cout<<"***************************************************************************"<<endl;。

cout<<" 1.添加 6.排 序"<<endl;。

cout<<" 2.查询 7.及格率"<<endl;。

cout<<" 3.显示 8.最高分"<<endl;。

cout<<" 4.修改 9.最低分"<<endl;。

cout<<" 5.删除 10.退 出"<<endl;。

cout<<"***************************************************************************"<<endl;。

cout<<"请请根据你的需要选择(1~10):";。

cin>>b;。

switch(b)

{

case 1:

cout<<"请依次输入该学生的相关信息:"<<endl;。

person.add();。

break;

case 2:

person.search();。

break;

case 3:

person.show();。

break;

case 4:

person.change();。

break;

case 5:

person.del();。

break;

case 6:

person.PX();。

break;

case 7:

person.rate();。

break;

case 8:

person.MAX();。

break;

case 9:

person.MIN();。

break;

case 10:

cout<<"谢谢使用本系统!!!"<<endl;。

}

}while(b<10);。

求解!!很急很关键!的相关图片

求解!!很急很关键!

//C++课程设计---学生成绩管理系统。

#include <stdio.h>。

#include <string.h>。

#include <iostream.h>。

#include <stdlib.h>。

#include <windows.h>。

typedef struct studentinfo //结构体定义。

int num;//学号

char name[64];//姓名。

int sex;//性别,1为男性,0为女性。

float math;//数学。

float english;//英语。

float politic;//政治。

float chinese;//语文。

float total;//总成绩。

struct studentinfo *next;。

}STUDENT;

#define FILENAME "D:\\1.txt"。

//定义默认的数据库文件

#define DELAYTIME 1500。

//显示信息,延时

void create_menu();。

STUDENT * new_student();。

STUDENT* create_linkbyfile(char *);。

STUDENT *del_info(STUDENT *);。

int save_info(char *,STUDENT *,int);。

int find_infile_printf(char *);。

int pri_whole_link(STUDENT *);。

STUDENT* printf_sort(STUDENT *);。

void free_link(STUDENT *);。

void main() //主函数。

create_menu();。

void create_menu()。

//功能:输出功能菜单,提供人-机接口。

int menu_Num;

STUDENT *head=NULL;。

char ch;

char file_name[256];。

while(1)

{

system("cls");。

cout<<"\t\t学生成绩管理系统\n";。

cout<<"##########################################\n";。

cout<<"#\t\t 1.新增学生信息\t\t #\n";。

cout<<"#\t\t 2.加载数据库\t\t #\n";。

cout<<"#\t\t 3.删除学生信息\t\t #\n";。

cout<<"#\t\t 4.保存学生信息\t\t #\n";。

cout<<"#\t\t 5.数据库查询\t\t #\n";。

cout<<"#\t\t 6.原序输出\t\t #\n";。

cout<<"#\t\t 7.排序输出\t\t #\n";。

cout<<"#\t\t 8.退出\t\t\t #\n";。

cout<<"##########################################\n";。

cout<<"请输入操作编号:";。

cin>>menu_Num;。

switch (menu_Num)。

{

case 1:

free_link(head);//释放链表空间。

head=new_student();//新增学生信息。

break;

case 2:

free_link(head);//释放链表空间。

cout<<"请输入要加载的数据库文件的路径"<<endl;。

cin>>file_name;。

head=create_linkbyfile(file_name);//读取数据文件。

if(head!=NULL)。

{

cout<<"数据库"<<file_name<<"已加载"<<endl;。

Sleep(DELAYTIME);。

}

break;

case 3:

del_info(head);//删除学生信息。

break;

case 4://保存学生信息。

if (head==NULL)。

{

cout<<"请先生成学生信息"<<endl;。

Sleep(DELAYTIME);。

}

else

{

cout<<"想将学生信息保存到哪个数据库文件?";。

cin>>file_name;。

cout<<"请选择保存方式:0追加到文件末尾 1覆盖文件\n";。

cin>>menu_Num;。

if(save_info(file_name,head,menu_Num)==0)//0表示追加,1表示覆盖。

{

cout<<"信息保存失败\n";。

}

else

{

cout<<"数据已保存到"<<file_name<<endl;。

Sleep(DELAYTIME);。

}

}

break;

case 5:

find_infile_printf(FILENAME);//数据库查询。

break;

case 6://原序输出信息。

pri_whole_link(head);。

cout<<"返回主菜单? Y/N\t";。

do

{

cin>>ch;。

}while(ch!='Y'&&ch!='y');。

break;

case 7://排序输出信息。

do

{

if((head=printf_sort(head))==NULL)。

{

cout<<"数据库未加载"<<endl;。

Sleep(DELAYTIME);。

break;

}

else

{

cout<<"选择其他方式排序? Y/N\t";。

cin>>ch;。

}

}while(ch=='Y'||ch=='y');。

break;

case 8:

free_link(head);//释放链表空间。

exit(0);

break;

default:

cout<<"输入有误!请重新输入!"<<endl;。

break;

}

}

STUDENT * new_student()。

//功能:创建学生信息(通过链表)

//返回值:头结点指针

STUDENT *pnew,*p,*head;。

float *pfloat;。

char ch;

head=NULL;

do

{

system("cls");。

pnew=(STUDENT *)malloc(sizeof(STUDENT)*1);。

cout<<"请输入学生的学号(0表示取消): ";。

cin>>pnew->num;。

if(0>=pnew->num)。

{

break;

}

cout<<"请输入学生的姓名:";。

cin>>pnew->name;。

while(1)

{

cout<<"请输入学生的性别:0/1\t";。

cin>>pnew->sex;。

if(pnew->sex&&pnew->sex-1)。

{

cout<<"性别输入错误,0表示女性,1表示男性,请重新输入"<<endl;。

}

else

{

break;

}

}

cout<<"请依次输入学生的数学、英语、政治、语文成绩:"<<endl;。

for(pnew->total=0,pfloat=&pnew->math;pfloat<&pnew->math+4;)。

{

cin>>*pfloat;。

if(*pfloat<0||*pfloat>150)。

{

cout<<"成绩输入错误,只能为0~150"<<endl;。

}

else

{

pnew->total+=*pfloat;。

pfloat++;

}

}

if(head==NULL)。

{

head=pnew;

}

else

{

p->next=pnew;。

}

p=pnew;

pnew->next=NULL;。

cout<<"##########################该学生信息已生成#########################\n";。

cout<<"建立另一个学生的信息? Y/N\t";。

cin>>ch;。

}while(ch=='Y'||ch=='y');。

return head;

STUDENT* create_linkbyfile(char *filename)。

//功能:读取文件,创建链表

//参数:如果filename不为空,则打开该文件,如果filename为空,要求输入文件位置。

//创建的链表的所有结点的next全部修改,指向物理地址上的下一个结点。

system("cls");。

FILE *fp;

STUDENT *head,*ptemp,*pnew;。

head=NULL;//初始化head为空。

if(filename==NULL)//若filename为空,要求输入文件绝对地址。

{

char file_name[256];。

cout<<"请输入数据库文件的路径:"<<endl;。

cin>>file_name;。

if(NULL==(fp=fopen(file_name,"rb")))。

{

cout<<"数据库连接失败\n";。

return 0;

}

}

else

{

if(NULL==(fp=fopen(filename,"rb")))。

{

cout<<"数据库连接失败\n";。

return 0;

}

}

for(ptemp=NULL;;)。

{

pnew=(STUDENT *)malloc(sizeof(STUDENT)*1);。

if(fread(pnew,sizeof(STUDENT),1,fp)!=NULL)。

{

if(ptemp!=NULL)。

{

ptemp->next=pnew;。

}

else

{

head=pnew;

}

ptemp=pnew;

}

else

{

if(ptemp!=NULL)。

{

ptemp->next=NULL;。

}

else

{

head=NULL;

}

free(pnew);

break;

}

}

fclose(fp);

return head;

STUDENT *del_info(STUDENT *head)。

//根据学号,删除链表的结点

system("cls");。

STUDENT *p1,*p2;。

int num;

if (head==NULL)。

{

cout<<"数据库未加载"<<endl;。

Sleep(DELAYTIME);。

return 0;

}

cout<<"请输入要删除学生的学号:";。

cin>>num;。

for(p1=head;p1!=NULL;)。

{

if(p1->num==num)//找到。

{

if(p1==head)//要删除的结点是头结点。

{

head=p1->next;。

}

else

{

p2->next=p1->next;。

}

cout<<"成功删除!!";。

}

p2=p1;

p1=p1->next;。

}

return head;

int save_info(char *filename,STUDENT *head,int flag)。

//功能:将链表按Binary写入文件末尾。

//参数:

//1.filename文件名,绝对地址。

//2.head指向链表的头结点。

//3.flag 0追加或1覆盖数据。

//返回值:失败则返回0

system("cls");。

FILE *fp;

STUDENT *p;

char openmethod[8];。

if(flag==0)

{

strcpy(openmethod,"ab+");//追加。

}

else

{

strcpy(openmethod,"w");//覆盖。

}

if(NULL==(fp=fopen(filename,openmethod)))//。

{

cout<<"数据库连接失败"<<endl;。

Sleep(DELAYTIME);。

return 0;

}

else

{

for(p=head;p;p=p->next)。

{

if((fwrite(p,sizeof(STUDENT),1,fp))==NULL)。

{

cout<<"数据库创建失败"<<endl;。

return 0;

}

}

}

fclose(fp);

return 1;

int find_infile_printf(char *filename)。

//功能:根据学号和姓名来查询某个学生。

//参数:filename数据库文件。

//返回值:失败返回0

//直接搜索文件,缺点是速度慢。

//也可先根据文件创建链表,再搜索链表,缺点是如果文件较大,占用内存多。

system("cls");。

FILE *fp;

STUDENT stu;

int num;

char stu_name[64];。

char ch;

if(filename==NULL)。

{

return 0;

}

do

{

memset(stu_name,0,sizeof(stu_name));。

cout<<"查询学号或查询姓名? 1查询学号 0查询姓名";。

//flag=1根据学号来查询,flag=0根据姓名来查询。

cin>>num;。

if(num==1)

{

cout<<"输入要查询的学号:";。

cin>>num;。

cout<<"正在为您查询学号为"<<num<<"的学生……"<<endl;。

}

else if(num==0)。

{

cout<<"输入要查询的姓名:";。

cin>>stu_name;。

cout<<"正在为您查询姓名为"<<stu_name<<"的学生……"<<endl;。

}

else

{

cout<<"输入有误"<<endl;。

return 0;

}

if(NULL==(fp=fopen(filename,"rw")))。

{

cout<<"数据库连接失败\n";。

return 0;

}

else

{

while(fread(&stu,sizeof(STUDENT),1,fp)!=NULL)。

{

if(strcmp(stu.name,stu_name)==0||stu.num==num)。

{

cout<<"学号\t姓名\t性别\t数学\t英语\t政治\t语文\t总成绩\n";。

//输出该学生的所有信息。

cout<<stu.num<<"\t"<<stu.name<<"\t"<<stu.sex<<"\t"<<stu.math<<"\t"<<stu.english<<"\t"<<stu.politic<<"\t"<<stu.chinese<<"\t"<<stu.total<<endl; 。

//不加break;可支持多个相同数据的索引。

}

}

}

cout<<"##########################查询完毕#########################\n";。

cout<<"查询另一个学生的信息? Y/N\t";。

cin>>ch;。

}while(ch=='Y'||ch=='y');。

fclose(fp);

return 1;

int pri_whole_link(STUDENT *head)。

//功能:显示整条链表的学生信息。

//参数:head 头结点指针,如果head为空,返回空。

system("cls");。

STUDENT* p;

if (head==NULL)。

{

cout<<"数据库未加载"<<endl;。

Sleep(DELAYTIME);。

return 0;

}

cout<<"学号\t姓名\t性别\t数学\t英语\t政治\t语文\t总成绩\n";。

for(p=head;p;p=p->next) 。

{

cout<<p->num<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->math<<"\t"<<p->english<<"\t"<<p->politic<<"\t"<<p->chinese<<"\t"<<p->total<<endl; 。

}

return 1;

STUDENT* printf_sort(STUDENT *head)。

//功能:根据学号|某科目成绩|总成绩对链表进行排序,然后输出。

//参数:head链表头指针,如果head为空,返回空。

//返回值:返回新的链表的头结点指针。

system("cls");。

STUDENT *p1,*p2,*ptemp,*pfinished=NULL;。

int num;

int flag;

if (head==NULL)。

{

return 0;

}

cout<<"选择排序依据 0.数学成绩1.英语成绩2.政治成绩3.语文成绩4.总成绩\n";。

cin>>num;。

// cout<<"升序/降序输出? 0.升序1.降序";。

// cin>>flag;。

for(p1=head;p1->next!=pfinished;)//对链表进行从大到小排序(这里用冒泡法)

//p1使之总是指向头结点,pfinished使之总是指向已排序好的最前面的结点。

//ptemp作为中介,保存p2的上一个结点。

{

for(p2=p1;p2->next!=pfinished;)。

{

if(*(&(p2->math)+num)<*(&(p2->next->math)+num))//p2的值小于p2->next的值,交换 ptemp p2 p2->next。

{

if(p2==p1)//头结点要交换。

{

p1=p2->next;。

p2->next=p1->next;。

p1->next=p2;。

ptemp=p1;

}

else

{

ptemp->next=p2->next;。

ptemp=p2->next;。

p2->next=ptemp->next;。

ptemp->next=p2;。

}

}

else//不需要交换,则p2、ptemp前进1位。

{

ptemp=p2;

p2=p2->next;。

}

}

pfinished=p2;。

}

// if(flag==1)

// {

pri_whole_link(p1);。

// }

// else

// {

// }

cout<<"##########################信息显示完毕#########################\n";。

return p1;

void free_link(STUDENT *head)。

//释放链表空间,如果head,什么都不做。

STUDENT *p1,*p2;。

for(p1=head;p1;p1=p2)。

{

p2=p1->next;//先保存,否则。

free(p1);//free后 p1->next数据丢失。

}

设计学生抽象类,继承实现本科生、研究生类;编程实现测试类,要求利用对象数组,实现所有学生信息输出?

public class Student {。

private String sNo;。

private String sName;。

private String sSex;。

private int sAge; 。

private int sJava;。

public Student(){}。

public Student(String no,String name,String sex,int age,int java){。

sNo=no;

sName=name;

sSex=sex;

sAge=age;

sJava=java;

public String getNo(){。

return sNo;

public String getName(){。

return sName;

public String getSex(){。

return sSex;

public int getAge(){。

return sAge;

public int getJava(){。

return sJava;

public String toString(){。

return "学号:"+sNo+",姓名:"+sName+。

",性别:"+sSex+",年龄:"+sAge+",成绩:"+sJava;。

//测试

public static void main(String[] args) {。

// TODO Auto-generated method stub。

Student[] students=new Student[5];。

students[0]=new Student("2016001","张一","男",22,80);。

students[1]=new Student("2016002","张二","男",21,85);。

students[2]=new Student("2016003","张三","女",23,90);。

students[3]=new Student("2016004","张四","男",22,70);。

students[4]=new Student("2016005","张五","女",20,88);。

//输出每个学生的信息,计算5个学生的分数总和。

double score=0;。

for(Student stu:students){。

System.out.println(stu);。

score=score+stu.getJava();。

//输出平均成绩

System.out.println("平均成绩:"+(score/5));。

//冒泡排序,从大到小

Student student=new Student();。

for(int i=0;i<students.length;i++)。

for(int j=i+1;j<students.length;j++){。

if(students[i].getJava()<students[j].getJava()){。

student=students[i];。

students[i]=students[j];。

students[j]=student;。

//输出最大,最小分数

System.out.println("分数最大为:"+students[0].getJava());。

System.out.println("分数最小为:"+students[4].getJava());。

//排序后的数组

for(Student stu:students){。

System.out.println(stu);。

结果:

学号:2016001,姓名:张一,性别:男,年龄:22,成绩:80。

学号:2016002,姓名:张二,性别:男,年龄:21,成绩:85。

学号:2016003,姓名:张三,性别:女,年龄:23,成绩:90。

学号:2016004,姓名:张四,性别:男,年龄:22,成绩:70。

学号:2016005,姓名:张五,性别:女,年龄:20,成绩:88。

平均成绩:82.6

分数最大为:90

分数最小为:70

学号:2016003,姓名:张三,性别:女,年龄:23,成绩:90。

学号:2016005,姓名:张五,性别:女,年龄:20,成绩:88。

学号:2016002,姓名:张二,性别:男,年龄:21,成绩:85。

学号:2016001,姓名:张一,性别:男,年龄:22,成绩:80。

学号:2016004,姓名:张四,性别:男,年龄:22,成绩:70。

也可以把Student类实现Comparable接口,放进list集合里。

用Collections.sort方法排序。

原文地址:http://www.qianchusai.com/student-0.html

7798,7798港币约合人民币

7798,7798港币约合人民币

单网卡虚拟机安装lede软路由,虚拟机软路由需要几个网口

单网卡虚拟机安装lede软路由,虚拟机软路由需要几个网口

excel-20,excel2010默认扩展名是啥

excel-20,excel2010默认扩展名是啥

excel-10,excel100多万空白行删不掉

excel-10,excel100多万空白行删不掉

excel-50,excel50米成绩怎么填

excel-50,excel50米成绩怎么填

excel-40

excel-40

excel-60

excel-60

excel-90,excel90度符号怎么输入

excel-90,excel90度符号怎么输入

excel-70,excel70%和30%占比的公式

excel-70,excel70%和30%占比的公式

excel-0,excel0不显示0怎么办

excel-0,excel0不显示0怎么办