课程设计实验报告

《C++程序设计》课 程 设 计 说 明

题目名称:学生成绩管理系统

学生学号:120123503037

学生姓名:张金宝

指导老师:张玉军 马驰

20xx年3月

目 录

第一部分

第1题~第14题 程序代码

第二部分 学生成绩管理系统(题目)

一、需求分析 .................... 错误!未定义书签。

二、设计 ........................ 错误!未定义书签。

三、编码与调试 .................. 错误!未定义书签。

四、结果分析 ..................................... 4

五、参考文献 ..................................... 5

六、总结 ......................................... 6

第一部分

第1题~第14题 程序代码

第1题:

一数组中已存放了10个有序的整数,现由键盘输入一个整数,将此数插入到该数组中,使数组仍然是有序的。

#include<iostream.h>

void main()

{ int i,x,m;

int a[11]={10,20,30,40,50,60,70,80,90,100};

cout<<"please input a number:"<<endl;

cin>>x;

for(i=0;i<10;i++)

if(a[i]>x) break;

for(m=9;m>=i;m--)

a[m+1]=a[m];

;

a[i]=x;

for(i=0;i<=10;i++)

cout<<a[i]<<" ";

}

第2题:

输入20个整数存入数组中,输出其中的偶数及偶数之和。 #include<iostream.h>

void main()

{const int N=20;

int i,sum=0,a[N];

1

cout<<"please input 20 numbers:"<<endl;

for(i=0;i<N;i++)

cin>>a[i];

for(i=0;i<N;i++)

if (a[i]%2==0)

{sum+=a[i];

cout<<a[i]<<" ";}

cout<<endl;

cout<<"sum="<<sum<<endl;

}

第3题:

用函数实现求result =1+(1+2)+(1+2+3)+……+(1+2+3+……+n)的值,n的值由键盘输入。

#include<iostream.h>

int lj(int x);

void main()

{ int i,n;

cout<<"please iput a number :"<<endl;

int result=0;

cin>>n;

for(i=1;i<=n;i++)

result=result+lj( i);

cout<<result<<endl;

}

int lj(int x)

{ int i,sum=0;

for(i=1;i<=x;i++)

sum+=i;

2

return sum;

}

第4题:

输出50—100间的所有素数,其中判断一个数是否为素数用函数完成。 #include<iostream.h>

bool ss(int );

void main()

{int n;

for(n=50;n<=100;n++)

if(ss(n))

cout<<n<<endl;

}

bool ss(int n)

{int i;

for (i=2;i<n;i++)

{if(n%i==0)

break;}

if(i==n) return true;

else return false;

}

第5题:

有一个一维数组score,内放10个学生成绩,求平均成绩。 3

#include<iostream.h>

void main()

{double score[80],sum=0.0,ave;

int N=10,i;

cout<<"please input 10 scores:"<<endl;

for(i=0;i<10;i++)

cin>>score[i];

for(i=0;i<10;i++)

{cout<<score[i]<<" ";

sum+=score[i];}

ave=sum/N;

cout<<"平均成绩为:"<<ave<<endl;

}

第6题:

写一函数,要求数组作函数的参数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

#include<stdio.h>

#include<string.h>

change(char b[])

{

char c; int i,n=0;

n=strlen(b);

for(i=0;i<n/2;i++)

{c=b[n-i];b[n-i]=b[i];b[i]=c;}

b[n+1]='\0';

return(n);

}

void main()

{

char a[80];

int n,i;

scanf("%s",a);

n=change(a);

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

4

printf("%c",a[i]);

}

第7题:

由键盘输入10个数,找出它们的最大值、最小值并求出平均值。(要求用指针实现)

#include<iostream.h>

void main()

{

int a[30],i,n,max,min,*p;

float ave,sum=0;

cout<<"please input 10 numbers:"<<endl;

for(i=0;i<10;i++)

cin>>a[i];

p=a;

max=min=*p;

for(i=0;i<10;i++,p++)

{if(max<*p) max=*p;

if(min>*p) min=*p;

sum=sum+*p;

}

ave=sum/10;

cout<<"max="<<max <<" " <<"min="<<min <<" "<<"ave="<<ave <<endl;

}

第8题 :

从键盘输入两个字符串,将它们合并成一个新的字符串。

#include <stdio.h>

void main()

{printf("please input two words:");

5

char a[40],b[40], *p,*q;

int n=0;

scanf("%s",a);

scanf("%s",b);

for(p=a;*p!='\0'; p++) ;

for(q=b;*q!='\0';p++,q++)

*p=*q;

*p='\0';

for(p=a;*p!='\0';p++)

printf("%c",*p);

}

第9题:

构建一个类score,其中用私有数据成员number表示学号,computer、english、average分别表示计算机成绩、英语成绩和平均分数。公有成员函数inscore()用于输入学号和各科成绩,以及计算平均分数;成员函数showscore() 用来输出成绩。

#include<iostream.h>

class score

{private:long number;

float computer,english,average;

public:

void inscore()

{cout<<"请输入学号,计算机及英语成绩:"<<endl;

cin>>number>>computer>>english;

average=(computer+english)/2.0;

}

void showscore()

{cout<<"学号 计算机 英语平均成绩:"<<endl;

cout<<number<<" "<<computer<<" "<<english<<" "<<average<<endl;

}

};

void main()

{score stu1;

6

stu1.inscore();

stu1.showscore();

score*stu2=new score;

stu2->inscore();

stu2->showscore();

}

第10题:

设计一个学生成绩管理系统,能输入学生的学号、姓名和成绩等数据,能按成绩从高到低进行排序,并能将排序的结果输出。

提示:

(1) 设计一个学生类student,包含三个私有数据成员,即学号sno、姓名sname和成员score

(2) 在学生类student中再设计三个公有成员函数 setdata、display和getscore,分别用于完成输入学生信息、输出学生信息、返回某个学生成绩的功能

(3) 定义一个manage类,它有一个student类型的私有数据成员s[num],其中num表示学生人数

(4) 在manage类中分别定义三个公有成员函数input、output、sort,分别用于完成输入、输出和排序功能。

#include<iostream.h>

#include<stdio.h>

class student

{int sno;

char sname[20];

float score;

public:

void setdata()

{cout<<"输入学号:"<<endl;

cin>>sno;

cout<<"输入姓名:"<<endl;

gets(sname);

cout<<"输入分数:"<<endl;

cin>>score;

}

7

void display()

{cout<<"学号:"<<sno<<endl;

cout<<"姓名:";

for(int i=0;sname[i]!='\0';i++)

cout<<sname[i];

cout<<endl;

cout<<"成绩:"<<score<<endl<<endl; }

float getscore()

{return score;}

};

class manage

{int i,num;

student s[80];

public:

void input(int a)

{num=a;for(i=0;i<num;i++) s[i].setdata();} void sort()

{ student t; int max;

for(i=0;i<num;i++)

{max=i;

for(int j=i;j<num;j++)

if(s[j].getscore()>s[max].getscore()) max=j;

t=s[max];

s[max]=s[i];

s[i]=t;

}

}

void output()

{sort();

for(i=0;i<num;i++)

{cout<<"第"<<i+1<<"名:";

s[i].display();}

}

};

void main()

{int a;manage b;

8

cout<<"输入学生人数:"<<endl;

cin>>a;

b.input(a);

b.output();

}

(11)设计一个图书借阅管理系统。每本书有书号、书名和作者姓名属性,读者有借书证号、读者姓名和每位读者最多能够借阅的图书数量属性。(要求使用类的继承和派生知识点实现)

提示:

由于图书和读者都具有编号和名称两个属性,所以可以定义一个能够对编号和名称进行管理的类object,然后在object类的基础上派生出图书类book和读者类reader。

#include<iostream.h>

#include<stdio.h>

class object

{protected:

int number;

char name[20];

};

class book:public object

{char author[20];

public:

void get(int a)

{number=a;

cout<<"输入书名:"<<endl;

gets(name);

cout<<"输入作者名:"<<endl;

gets(author);

}

void put()

{cout<<"书号:"<<number<<endl;

cout<<"书名:";

for(int i=0;name[i]!='\0';i++)

cout<<name[i];

cout<<"\n作者名:";

for( i=0;author[i]!='\0';i++)

9

cout<<author[i];

cout<<endl;

}

};

class reader:public object

{int m;

public:

void get(int a)

{number=a;

cout<<"输入读者姓名:"<<endl; gets(name);

cout<<"输入读者最大借书量:"<<endl; cin>>m;

}

void put()

{cout<<"借书证号:"<<number<<endl; cout<<"读者姓名:";

for(int i=0;name[i]!='\0';i++) cout<<name[i];

cout<<"\n最大借书量:"<<m<<endl; }

};

void main()

{int a;

book A;

reader B;

cout<<"输入书号:";

cin>>a;

A.get(a);

cout<<"输入借书证号:"; cin>>a;

B.get(a);

A.put();

B.put();

}

10

(12).定义一个抽象类Shape,在其中说明一个纯虚函数area()作为一个接口,用来计算圆形、三角形、正方形和长方形的面积。要求由抽象类派生出圆形、三角形、正方形和长方形4个派生类。在各派生类中分别实现求各个图形的面积。#include<iostream.h>

#include<math.h>

class shape

{public:

virtual double area()=0;

};

class circle:public shape

{int i;

public:

circle(int a){i=a;}

double area(){return 3.14*i*i;}

};

class triangle:public shape

{int i,j,k;

public:

triangle(int b,int c,int d)

{i=b;j=c;k=d;}

double area(){double h=(i+j+k)/2;

return sqrt(h*(h-i)*(h-j)*(h-k));}

};

class zheng:public shape

{int i;

public:

zheng(int e){i=e;}

double area(){return i*i;}

};

class chang:public shape

{int i,j;

public:

chang(int f,int k){i=f;j=k;}

double area(){return i*j;}

};

void main()

{int a,b,c,d,e,f,k;

11

cout<<"输入圆的半径:";

cin>>a;

cout<<"输入三角形三边:";

cin>>b>>c>>d;

cout<<"输入正方形边长:";

cin>>e;

cout<<"输入长方形的长和宽:";

cin>>f>>k;

circle A(a);

triangle B(b,c,d);

zheng C(e);

chang D(f,k);

cout<<"圆面积:"<<A.area()<<endl;

cout<<"三角形面积:"<<B.area()<<endl;

cout<<"正方形面积:"<<C.area()<<endl;

cout<<"长方形面积:"<<D.area()<<endl;

}

(13)用函数模板的方式设计可以对某种数据类型的数组中的数据用选择法进行从大到小排序,然后用整型数据和字符型数据进行验证

#include<iostream.h>

#include<stdio.h>

template<class T> void change(T a[])

{int i,j;

T t;

for(i=0;i<10;i++)

for(j=i;j<10;j++)

if(a[i]<a[j])

{t=a[i];

a[i]=a[j];

a[j]=t;

}

}

void main()

{ int a[10];

char b[10];

cout<<"输入十个数:"<<endl;

for(int i=0;i<10;i++)

cin>>a[i];

12

cout<<"输入十个连续字符:"<<endl; gets(b);

change(a);

change(b);

cout<<"排序后为:"<<endl; for( i=0;i<10;i++)

cout<<a[i]<<" ";

cout<<endl;

for(i=0;i<10;i++)

cout<<b[i]<<" ";

cout<<endl;

14.

#include <iostream>

#include <vector>

#include <fstream>

#include <string>

using namespace std;

int main()

{

vector<string> str;

string s;

ifstream fin("D:\\data.txt"); while( getline(fin,s) )

{

str.push_back(s);

13

}

for(vector<string>::iterator

iter=str.begin();iter!=str.end();++iter)

cout<<*iter<<endl;

cout<<"总共"<<str.size()<<"行"<<endl;

return 0;

}

第二部分 学生成绩管理系统(题目)

一、需求分析

需求分析即问题的描述,根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么,限制条件是什么。在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定系统的功能模块以及模块之间的调用关系。

本系统根据学生成绩管理的需要,而建立一个“学生成绩管理系统”,以方便对成绩的各项管理操作。本系统能对成绩进行输入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能根据学生的姓名来查询该学生的成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,并且添加到系统中;能把对系统所进行的操作进行保存,以及时更新系统中的数据。

二、设计

分析对问题描述中涉及的操作对象定义相应的类,并按照以数据结构为中 14

心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,定义相应的存储结构并写出伪码算法。抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。确定每一个模块的算法流程,画出流程图。

把详细设计的结果进一步求精为程序设计语言程序,同时加入一些注解,使程序中逻辑概念清楚;

(1)输入学生资料模块:

主要功能用来对学生的成绩进行收集和输入。在学生信息保存在系统中的前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。在准确输入学生资料后,就可以对该学生的各科成绩进行录入。该学生各科成绩输入成功后,系统会提示是否继续进行操作,如果想继续输入学生成绩就输入y,不想再输入学生成绩的话就输入n,再输入n之后,系统返回到主菜单。

(2)输出学生资料模块:

主要功能用来对学生的成绩进行输出。在系统已经录入了学生资料成绩的前提下,使用该功能可以显示所有学生的信息,资料等等。具体包括学生的班级,学号,姓名和各科成绩。在查看学生的资料,成绩各方面的信息后,按任意键就可以返回到主菜单。

(3) 按学生姓名进行排列模块

15

主要功能是用来对学生的资料按姓名进行排序。在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料按姓名进行排序,这样就方便查找姓氏相同或是相近的同学的资料。

(4) 添加学生资料模块

主要功能是用来添加学生资料,成绩。如果系统有保存学生资料的情况下,想录入学生成绩的话,就不用添加学生资料这模块。如果系统没有保存该学生信息的话,就要使用此模块,在成功添加学生资料后,就可以对该学生进行其他的操作。

(5)按姓名查找,删除该学生资料模块

主要功能是用来删除学生资料。在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化

(6)查找并显示学生资料模块

主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息

(7)按姓名查找,修改学生资料模块

16

主要功能是用来修改学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,系统就会显示该学生资料和各科成绩等信息,这样就可以修改该学生的资料,成绩等信息。

(8)从文件中读入数据模块

主要功能是用来从文件中读入学生数据。由于一些资料可以用Word文档或Excel表格输入,故在此模块中增加了导入数据的功能。这样就方便很多,不用把学生资料一个一个添加,节省了很多时间精力。

(9)储存学生资料并退出系统模块

主要功能是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次的操作。

Student类类图

课程设计实验报告

17

typedef class

{

public:

char num[10];

char cla[10];

char name[20];

char byyl[10];

char jsjzc[20];

char sjk[10];

char jsjyy[20];

char jsdl[20];

}Student;

表1 Student类说明表

课程设计实验报告

三、编码与调试

采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;根据系统功能选择有代表性的数据进行测试,发现系统存在的不足并逐步改进。

注意:此部分不需要粘贴所有程序代码,对于程序主要运行界面需要粘 18

贴(如:主界面、查询界面等)。 算法思路:switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句。

代码:

void main() //主函数调用。

{

int n=0;

for(;;)

{

switch(menu())

{

case 1:

cout<<setw(15)<<" "<<"输入学生资料"<<endl;

n=Input(stu,n);

break;

case 2:

cout<<setw(15)<<" "<<"输出所有学生资料"<<endl;

Display(stu,n);

break;

case 3:

cout<<setw(15)<<" "<<"按姓名排序"<<endl;

Sort(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 4:

cout<<setw(15)<<" "<<"插入学生资料"<<endl;

n=Insert(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 5:

19

cout<<setw(15)<<" "<<"删除学生资料"<<endl;

cout<<setw(15)<<" "<<"输入他(她)的姓名:";

n=Delete(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 6:

cout<<setw(15)<<" "<<"查找学生"<<endl;

Query(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 7:

cout<<setw(15)<<" "<<"修改学生资料"<<endl;

cout<<setw(15)<<" "<<"输入你要修改的学生的姓名:";

n=Xiugai(stu,n);

system("pause");

break;

case 8:

cout<<setw(15)<<" "<<"从文件中读入数据"<<endl;

n=AddfromText(stu,n);

break;

case 0:

cout<<setw(15)<<" "<<"将所有资料写入文件"<<endl;

WritetoText(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

}

}

}

四、结果分析

程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出 结果,并加以文字分析。

20

主菜单

课程设计实验报告

输入学生资料模块

课程设计实验报告

输出学生资料模块 21

学生姓名进行排列模块

课程设计实验报告

22

添加学生资料模块

课程设计实验报告

查找删除学生模块

课程设计实验报告

23

课程设计实验报告

修改学生模块

课程设计实验报告

24

从文件中读入数据模块

课程设计实验报告

储存学生资料并退出系统模块

课程设计实验报告

25

五、参考资料

所查阅的书籍或资料

按下列例子中的格式书写:

[1]王国荣编.Active Server Page &Web数据库.人民邮电出版社

[2]阮家栋等编.WEB数据库技术.科学出版社.2002.3

[3]贺利坚等编.数据库技术及应用.北京希望电子出版社.2002.7

[4]魏应彬等.网页设计与WEB数据库发布技术.清华大学出版社.2001.1

[5]张文增, 孙振国, 赵冬斌等.基于Web数据库的子集合查询技术.计算机应用.2002 Vol.22 No.1

六、总结

1.经验

课程设计实验报告

26

本学生成绩管理系统由九个模块组成,每个模块相互联系又相互独立。这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信息,能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。而且在每个模块也有不足的地方,比如在输入学生资料时,对每个信息项没有严格的规定,可以输入任何的字符。同时有些模块还不能实现本应该有的功能,这有待以后努力,争能够实现该有的功能。

在21世纪的科技时代,科学技术突飞猛进,计算机已经不仅是在科技上应用,而且在生活中也是同样得到了广泛在应用。如今,不管是小学、初中、高中、甚至是很多大学生的学生成绩管理基本上是靠人工进行管理,但随着时间的变化,学校规模的扩大,有关学生成绩管理工作和所涉及到的数据量越来越大越来越多,大多数学校不得不靠增加人力、物力、财力来进行学生成绩管理。但是人工管理成绩档案具有效率低、查找麻烦、可靠性不高、保密性低等因素。因此开发出一个不仅仅是适用于大中专院校以及其它高校通用的学生成绩管理系统是必要的。

开发一个学生成绩管理系统,采用计算机对学生成绩进行管 27

理,进一步提高了办学效益和现代化水平。为广大教师和学生提高工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化。现在我国的大中专院校的学生成绩档案管理水平普遍都不是很高,有的还停留在全用纸介质基础上,这种管理方式已不能适应时代的发展,社会的需求,因为它浪费了大量的人力物力,也存在着许多不足的因素。在今天信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替。一个高效的学生成绩管理系统可以存储历届的学生成绩档案,不需要大量的人力,只需要几名专门录入员即可操作系统,节省大量人力,可以迅速查到所需信息、高效、安全,学生在能方便的查看自己的成绩。

2.存在的问题及进一步改进

这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色,不仅如此,还写得功能不全,实在是惭愧。现在在这里也只能说说它的不足之处了。 类层次不够清晰,纵观整个程序可以发现四个类之间的关系不甚恰当,我有这个感觉,但我不知如何改进。 函数参数设定不够完美,整个程序中对指针的运用比较少。对于指针的巧妙运用把握得不够。 在调用系统的显示功能时,如果在show()函数前加一个*号输出的只是一个字符,不加反而能输出所有字符。show()函数的返回值为指针类型,但前面说过利用函数返回指针类型的值并不能输出字符数组中所有的字符,为什么这里又可以呢?老天,这是为什么?我不知道这一知识,这也算我的程序的不足之处吧! 对于两个统计函数的功能不全,我感到无能为力,我为了这两函数苦思了两天,硬是没凑合来。到后来,脑子里都乱了,运行时屏幕上尽是些乱七八糟的东西。老师帮我看看,看有没有什么简单的方法一下搞定它。 结果不是很好, 28

但过程够了就行。这也是自欺欺人的看法,让我再一次自责吧。

3.源程序代码

#include<iostream>

#include<stdio.h>

#include<ctype.h>

#include<stdlib.h>

#include<string.h>

#include<iostream>

#include<iomanip>

using namespace std;

typedef class

{

public:

char num[10];

char cla[10];

char name[20];

char byyl[10];

char jsjzc[20];

char sjk[10];

char jsjyy[20];

char jsdl[20];

}Student;

Student stu[80];

int menu()

{

char c;

for(;c<'0'||c>'8';)

{

system("cls");

cout<<" 欢迎使用本学生成绩管理系统!!"<<endl;

cout<<"编程人员:张金宝";

cout<<endl;

cout<<"****************************** 学生成绩管理系统 ****************************** "<<endl;

cout<<setw(32)<<" "<<"1.输入学生资料"<<endl;

cout<<setw(32)<<" "<<"2.输出学生资料"<<endl;

cout<<setw(32)<<" "<<"3.按学生姓名进行排列"<<endl;

29

cout<<setw(32)<<" "<<"4.添加学生资料"<<endl;

cout<<setw(32)<<" "<<"5.按姓名查找,删除该学生资料"<<endl; cout<<setw(32)<<" "<<"6.查找并显示学生资料"<<endl;

cout<<setw(32)<<" "<<"7.按姓名查找,修改该学生资料"<<endl; cout<<setw(32)<<" "<<"8.从文件中读入数据"<<endl;

cout<<setw(32)<<" "<<"0.储存学生资料并退出系统"<<endl; cout<<setfill('=')<<setw(48)<<"="<<endl;

cout<<setw(15)<<" ";

cout<<"请选择(0-8):";

c=getchar();

}

return(c-'0');

}

int Input(Student stud[],int n) //输入数据。

{

int i=0;

char sign,x[10];

for(;sign != 'n' && sign != 'N';)

{

cout<<setw(15)<<" "<<"班级:";

cin>>stud[n+i].cla;

cout<<setw(15)<<" "<<"学号:";

cin>>stud[n+i].num;

cout<<setw(15)<<" "<<"姓名:";

cin>>stud[n+i].name;

cout<<setw(15)<<" "<<"C++:";

cin>>stud[n+i].byyl;

cout<<setw(15)<<" "<<"数学:";

cin>>stud[n+i].jsjzc;

cout<<setw(15)<<" "<<"思想品德:";

cin>>stud[n+i].sjk;

30

cout<<setw(15)<<" "<<"大学英语:";

cin>>stud[n+i].jsjyy;

cout<<setw(15)<<" "<<"体育:";

cin>>stud[n+i].jsdl;

gets(x);

cout<<setw(10)<<" ";

cout<<"还有要输入的信息吗?(y/n)";

cin>>&sign;

i++;

}

return(n+i);

}

void Display(Student stud[], int n) //输出数据。

{

int i;

cout<<setw(15)<<" "<<setfill('-')<<setw(65)<<"-"<<endl;

cout<<setw(15)<<" "<<"班级 学号 姓名 C++ 数学 思想品德 大学英语 体育"<<endl;

cout<<setw(15)<<" ";

cout<<setfill('-')<<setw(65)<<"-"<<endl;

for(i=1;i<n+1;i++)

{

printf("\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n",stud[i-1].cla,stud[i-1].num,stud[i-1].name,stud[i-1].byyl,stud[i-1].jsjzc,stud[i-1].sjk,stud[i-1].jsjyy);

if(i>1 && i%10==0)

{

cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;

cout<<setw(15)<<" ";

system("pause");

cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;

}

31

}

cout<<setw(15)<<" ";

system("pause");

}

void Sort(Student stud[],int n) //按名字排序。 {

int i,j;

char t[20];

for(i=0;i<n-1;i++)

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

if(strcmp(stud[j].num,stud[j+1].num)>0) {

strcpy(t,stud[j+1].cla);

strcpy(stud[j+1].cla,stud[j].cla);

strcpy(stud[j].cla,t);

strcpy(t,stud[j+1].num);

strcpy(stud[j+1].num,stud[j].num);

strcpy(stud[j].num,t);

strcpy(t,stud[j+1].name);

strcpy(stud[j+1].name,stud[j].name);

strcpy(stud[j].name,t);

strcpy(t,stud[j+1].byyl);

strcpy(stud[j+1].name,stud[j].byyl);

strcpy(stud[j].byyl,t);

strcpy(t,stud[j+1].jsjzc);

strcpy(stud[j+1].name,stud[j].jsjzc);

strcpy(stud[j].jsjzc,t);

strcpy(t,stud[j+1].sjk);

strcpy(stud[j+1].name,stud[j].sjk);

strcpy(stud[j].sjk,t);

32

strcpy(t,stud[j+1].jsjyy);

strcpy(stud[j+1].name,stud[j].jsjyy);

strcpy(stud[j].jsjyy,t);

strcpy(t,stud[j+1].jsdl);

strcpy(stud[j+1].name,stud[j].jsdl);

strcpy(stud[j].jsdl,t);

}

cout<<setw(15)<<" "<<"排序成功!"<<endl;

}

int Insert(Student stud[],int n) //插入一条学生信息。 {

char x[10];

cout<<setw(15)<<" "<<"班级:";

cin>>stud[n].cla;

cout<<setw(15)<<" "<<"学号:";

cin>>stud[n].num;

cout<<setw(15)<<" "<<"姓名:";

cin>>stud[n].name;

cout<<setw(15)<<" "<<"C++:";

cin>>stud[n].byyl;

cout<<setw(15)<<" "<<"数学:";

cin>>stud[n].jsjzc;

cout<<setw(15)<<" "<<"思想品德:";

cin>>stud[n].sjk;

cout<<setw(15)<<" "<<"大学英语:";

cin>>stud[n].jsjyy;

cout<<setw(15)<<" "<<"体育:";

33

cin>>stud[n].jsdl;

gets(x);

n++;

cout<<setw(15)<<" "<<"插入成功!"<<endl;

return(n);

}

int Delete(Student stud[],int n) //按名字查找信息,删除信息。 {

char s[20];

int i=0,j;

cin>>s;

while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判断*/

if(i==n)

{

printf("\t\t\t没有发现该学生资料!\n"); /*返回失败信息*/

return(n);

}

for(j=i;j<n-1;j++) /*删除操作*/

{

strcpy(stud[j].num,stud[j+1].num);

strcpy(stud[j].name,stud[j+1].name);

strcpy(stud[j].cla,stud[j+1].cla);

strcpy(stud[j].byyl,stud[j+1].byyl);

strcpy(stud[j].jsjzc,stud[j+1].jsjzc);

strcpy(stud[j].sjk,stud[j+1].sjk);

strcpy(stud[j].jsjyy,stud[j+1].jsjyy);

strcpy(stud[j].jsdl,stud[j+1].jsdl);

}

cout<<setw(15)<<" "<<"当前信息已删除成功!"<<endl; /*返回成功信息*/ return(n-1);

}

void Query(Student stud[],int n) //按名字查找信息

{

char s[20];

34

int i=0;

cout<<setw(15)<<" "<<"输入他(她)的姓名:";

cin>>s;

while(strcmp(stud[i].name,s)!=0&&i<n)

i++; /*查找判断*/

if(i==n)

{

printf("\t\t\t没有发现该学生资料!\n"); /*输入失败信息*/ return;

}

cout<<setw(15)<<" "<<"学号:"<<stud[i].num<<endl;

cout<<setw(15)<<" "<<"C++:"<<stud[i].byyl<<endl;

cout<<setw(15)<<" "<<"数学:"<<stud[i].jsjzc<<endl;

cout<<setw(15)<<" "<<"思想品德:"<<stud[i].sjk<<endl; cout<<setw(15)<<" "<<"大学英语:"<<stud[i].jsjyy<<endl; cout<<setw(15)<<" "<<"体育:"<<stud[i].jsdl<<endl;

}

int Xiugai(Student stud[],int n) //修改信息。

{

n=Delete(stud,n);

cout<<setw(15)<<" "<<"输入你要修改的学生资料"<<endl; n=Insert(stud,n);

cout<<setw(15)<<" "<<"修改完成"<<endl;

return(n);

}

int AddfromText(Student stud[], int n) //从文件中读入数据。 {

int i=0,num;

FILE *fp;

char filename[20];

cout<<setw(15)<<" "<<"输入文件名:";

cin>>filename;

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

35

{

cout<<setw(15)<<" "<<"无法打开文件"<<endl;

cout<<setw(15)<<" ";

system("pause");

return(n);

}

fscanf(fp,"%d",&num);

for(;i<num;)

{

fscanf(fp,"%s%s%s%s%s%s%s",stud[n+i].cla,stud[n+i].num,stud[n+i].name,stud[n+i].byyl,stud[n+i].jsjzc,stud[n+i].sjk,stud[n+i].jsjyy,stud[n+i].jsdl);

i++;

}

n+=num;

fclose(fp);

cout<<setw(15)<<" "<<"读入成功!"<<endl;

cout<<setw(15)<<" ";

system("pause");

return(n);

}

void WritetoText(Student stud[],int n) //将所有记录写入文件。

{

int i=0;

FILE *fp;

char filename[20];

cout<<setw(15)<<" "<<"将资料输入文件"<<endl;

cout<<setw(15)<<" "<<"输入文件名:";

cin>>filename;

if((fp=fopen(filename,"w"))==NULL)

{

cout<<setw(15)<<" "<<"无法打开文件"<<endl;

system("pause");

return;

}

36

fprintf(fp,"%d\n",n);

for(;i<n;)

{

fprintf(fp,"%-6s%-5s%-5s%-5s%-5s%-5s%-5s\n",stud[i].cla,stud[i].num,stud[i].name,stud[i].byyl,stud[i].jsjzc,stud[i].sjk,stud[i].jsjyy);

i++;

}

fclose(fp);

cout<<setw(15)<<" "<<"输入成功!"<<endl;

int b;

cout<<setw(15)<<" "<<"请确定是否退出系统:"<<endl;

cout<<setw(15)<<" "<<"0.退出系统"<<endl;

cout<<setw(15)<<" "<<"1.返回"<<endl;

cin>>b;

if(b==0)

{

cout<<setw(15)<<" "<<"谢谢使用!"<<endl;

cout<<setw(15)<<" ";

system("pause");

exit(0);

}

}

void main() //主函数调用。

{

int n=0;

for(;;)

{

switch(menu())

{

case 1:

cout<<setw(15)<<" "<<"输入学生资料"<<endl;

n=Input(stu,n);

break;

case 2:

cout<<setw(15)<<" "<<"输出所有学生资料"<<endl;

37

Display(stu,n);

break;

case 3:

cout<<setw(15)<<" "<<"按姓名排序"<<endl;

Sort(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 4:

cout<<setw(15)<<" "<<"插入学生资料"<<endl; n=Insert(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 5:

cout<<setw(15)<<" "<<"删除学生资料"<<endl; cout<<setw(15)<<" "<<"输入他(她)的姓名:"; n=Delete(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 6:

cout<<setw(15)<<" "<<"查找学生"<<endl;

Query(stu,n);

cout<<setw(15)<<" ";

system("pause");

break;

case 7:

cout<<setw(15)<<" "<<"修改学生资料"<<endl;

cout<<setw(15)<<" "<<"输入你要修改的学生的姓名:"; n=Xiugai(stu,n);

system("pause");

break;

case 8:

cout<<setw(15)<<" "<<"从文件中读入数据"<<endl; n=AddfromText(stu,n);

break;

case 0:

cout<<setw(15)<<" "<<"将所有资料写入文件"<<endl; 38

WritetoText(stu,n); cout<<setw(15)<<" "; system("pause"); break;

}

}

}

39

40

41

42

43

相关推荐