C++语言课设 学生成绩管理系统,零一版本

发布时间:2010-12-24 16:17:28   来源:文档文库   
字号:

号: 20062431

名:

指导老师: 于滨

C++课程设计报告

1、课程设计目的

深入理解C++面向对象程序设计思想,运用已学知识解决实际问题

2、课程设计内容

2.1课程设计的题目及简介

学生成绩管理系统

先建立一个全班学生的链表,每个结点包含:学号、姓名、性别,系名,班级,生日住址,英语、数学、C++以及三门成绩。

要求利用面向对象程序设计思想的完成以下功能:

1、建立链表 (包含学号、姓名、性别,系名,班级,生日住址,英语、数学、C++以及三门成绩并以特殊数据作为结束)

2、排序 可以按对所有学生进行排序。

3、插入 输入一个学生的信息将它插入链表中,假定链表按学号有序。

4、查找 输入一个学生学号,输出其各科成绩,总成绩各平均成绩。

5、删除 从链表中按输入的学号删除该学生的所有信息。

6、统计 对各分数段人数进行统计并显示

7、存盘 将建立起来的链表以文件的形式存盘

8、读入 将原来已经存盘的文件读入内存,进行管理和修改。

2.2程序数据处理流图

2.3一个功能的算法流程图

2.3.1建立链表

2.3.2、排序

2.3.3、插入

2.3.4、查找

2.3.5、删除

2.3.6统计

2.4程序代码

#include

#include

#include

int size=0;

struct node

{

char num[15]; //学号

char name[20]; //姓名

char sex[20]; //性别

char birthday[20]; //生日

char department[20]; //系名

char classid[20]; //班级

char address[20]; //住址

float eng,math,cpp,Total,eva;

node *next;

}head; //定义结构体

class GradeManage{

public:

node *create(void);

void print(const node *head);

node *sort(node *head);

node *insert(node *head,node *p);

void search(node *head,char *p);

node *Deleteonenode(node *head,char *p);

void count(node *head,float g1,float g2);

void DeleteChain(node *head);

}; //定义类

node *GradeManage::create(void)

{

node *p1,*p2,*head=0;

char s1[20],s2[20],s3[20],s4[20],s5[20],s6[20],s7[20];

float s8,s9,s10;

cout<<"请输入学生信息,以字符0结束:"<

cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"生日"<<" "<<"系名"<<" "

<<"班级"<<" "<<"住址"<<" "<<"英语"<<" "<<"数学"<<" "<<"C++"<

cin>>s1>>s2>>s3>>s4>>s5>>s6>>s7>>s8>>s9>>s10;

while(strcmp(s1,"0")!=0)

{

p1=new node;

strcpy(p1->num,s1);

strcpy(p1->name,s2);

strcpy(p1->sex,s3);

strcpy(p1->birthday,s4);

strcpy(p1->department,s5);

strcpy(p1->classid,s6);

strcpy(p1->address,s7);

p1->eng=s8;

p1->math=s9;

p1->cpp=s10;

p1->Total=s8+s9+s10;

p1->eva=(s8+s9+s10)/3;

if(head==0)

{

head=p1;p2=p1;

}

else

{

p2->next=p1;p2=p1;

}

size++;

cout<<"继续输入"<

cin>>s1>>s2>>s3>>s4>>s5>>s6>>s7>>s8>>s9>>s10;

}

cout<<"输入结束!"<

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

cout<<'-';

p2->next=0;

return(head);

}

void GradeManage::print(const node *head)

{

const node *p=head;

cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"生日"<<" "<<"系名"<<" "<<"班级"<<" "<<"住址"<<" "<<"英语"<<" "<<"数学"<<" "<<"C++"<<" "<<"平均"<

while(p!=0)

{

cout<num<<" "<name<<" "<sex<<" "<birthday<<" "<department<<" "<classid<<" "<address<<" "<eng<<" "<math

<<" "<cpp<<" "<<" "<eva<

p=p->next;

}

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

cout<<'-';

cout<<'\n';

}

node *GradeManage::sort(node* head)

{

node **p;

p= new node*[size];

if(head==0)

{

cout<<"链为空,产生错误!"<

return(NULL);

}

if(head->next==0)

{

cout<<"只有一个数据!"<

return(head);

}

else

{

node *temp;

p[0]=head;

int i;

for(i=1;i

{

p[i]=p[i-1]->next;

}

p[size-1]->next=NULL;

for(i=0;i

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

if(strcmp(p[j]->num,p[j+1]->num)>0)

{

temp=p[j];p[j]=p[j+1];p[j+1]=temp;

}

}

p[size-1]->next=NULL;

head=p[0];

for(int i=1;i

{

p[i-1]->next=p[i];

}

p[size-1]->next=0;

cout<<"排序后:"<

print(head);

delete [] p;

return(head);

}

node *GradeManage::insert(node *head,node *p)

{

node *p1,*p2;

if(head==0){p->next=0;return(p);}

if(strcmp(head->num,p->num)>=0)

{

p->next=head;

return(p);

}

p2=p1=head;

while(p2->next&&strcmp(p2->num,p->num)<0)

{

p1=p2;p2=p2->next;

}

if(strcmp(p2->num,p->num)<0)

{

p2->next=p;p->next=0;

}

else

{

p->next=p2;p1->next=p;

}

return(head);

}

void GradeManage::search(node *head,char *p)

{

node *p1,*p2;

if(head==0)

{

cout<<"链为空,无法找到所要查找的学生信息!";

return;

}

if(strcmp(head->num,p)==0)

{

p1=head;

cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"生日"<<" "<<"系名"<<" "<<"班级"<<" "<<"住址"<<" "<<"英语"<<" "<<"数学"<<" "<<"C++"<<"Total"<<" "<<"eva"<

cout<num<<" "<name<<" "<sex<<" "<birthday<<" "<department<<" "<<

p1->classid<<" "<address<<" "<eng<<" "<math<<" "<cpp<<" "<Total<eva<<" "<

}

else

{

p1=head;p2=head->next;

while(p2->next&&strcmp(p2->num,p)!=0)

{

p1=p2;p2=p2->next;

}

if(strcmp(p2->num,p)==0)

{

cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"生日"<<" "<<"系名"<<" "<<"班级"<<" "<<"住址"<<" "<<"英语"<<" "<<"数学"<<" "<<"C++"<<" "<<"Total"<<" "<<"eva"<

cout<num<<" "<name<<" "<sex<<" "<birthday<<" "<department<<" "<<

p2->classid<<" "<address<<" "<eng<<" "<math<<" "<cpp<<" "<Total<<" "<eva<

}

else

cout<<"链上没有找到要找的学生信息!"<

}

return;

}

node *GradeManage::Deleteonenode(node *head,char *p)

{

node *p1,*p2;

if(head==0)

{

cout<<"链为空,无法找到所要删除的学生信息!"<

return(0);

}

if(strcmp(head->num,p)==0)

{

p1=head;

head=head->next;

delete p1;

cout<<"*********"<<"已成功删除!"<<"*********"<

}

else

{

p1=head;p2=head->next;

while(p2->next&&strcmp(p2->num,p)!=0)

{

p1=p2;p2=p2->next;

}

if(strcmp(p2->num,p)==0)

{

p1->next=p2->next;

delete p2;

cout<<"*********"<<"已成功删除!"<<"*********"<

}

else

cout<<"*********"<<"链上没有找到要删除的学生信息!"<<"*********"<

}

return(head);

}

void GradeManage::count(node *head,float g1,float g2)

{

node *p=head;

int n=0;

while(p!=0)

{

if(p->Total>=g1 && p->Total

{

n++;

}

p=p->next;

}

cout<<"*********"<<"总成绩在"<"<之间的人数为:"<

cout<

return;

}

void GradeManage::DeleteChain(node *head)

{

node *p;

while(head)

{

p=head;

head=head->next;

delete p;

}

}

int main()

{

GradeManage class1;

node *head;

char s1[10],s2[20],s3[20],s4[20],s5[20],s6[20],s7[20];

float s8,s9,s10;

float ave;

node *p1;

head=class1.create(); //新建链表

class1.print(head);

cout<<"请输入要插入学生的信息!"< //完成插入功能

cout<<" "<<"学号"<<" "<<"姓名"<<" "<<"性别"<<" "<<"生日"<<" "<<"系名"<<" "<<"班级"<<" "<<"住址"<<" "<<"英语"<<" "<<"数学"<<" "<<"C++"<<" "<

cin>>s1>>s2>>s3>>s4>>s5>>s6>>s7>>s8>>s9>>s10;

p1=new node;

strcpy(p1->num,s1);

strcpy(p1->name,s2);

strcpy(p1->sex,s3);

strcpy(p1->birthday,s4);

strcpy(p1->department,s5);

strcpy(p1->classid,s6);

strcpy(p1->address,s7);

p1->eng=s8;

p1->math=s9;

p1->cpp=s10;

p1->Total=s8+s9+s10;

p1->eva=(s8+s9+s10)/3;

head=class1.insert(head,p1);

cout<<"插入后:"<

class1.print(head);

size++; //完成排序功能

head=class1.sort(head);

char s11[15]; //完成查找功能

cout<<"你要查找的学生的学号:";

cin>>s11;

class1.search(head,s11);

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

cout<<'-';

cout<<"请输入你要删除的学生的学号:"; //完成删除功能

char s12[15];

cin>>s12;

head=class1.Deleteonenode(head,s12);

for (int j=0;j<80;j++)

cout<<'-';

cout<<"你想知道哪一个分数段(g1,g2)的人数?请输入(?--?):";//完成统计功能

float g1,g2;

cin>>g1>>g2;

class1.count(head,g1,g2);

class1.DeleteChain(head);

}

2.5运行实例

2.5.1运行显示界面

2.5.2完成输入和插入界面

2.5.3查找界面

2.5.4删除界面

3课程设计总结

因为去年选课的问题,没有选到C++实践课,在隔了一年这后,再拿起不太常用的C++,而且也是有一定难度的题目,是思考了很久,最后又结合别人的程序才有了上面的程序成果。

因为这次实习,让我知道真C++的应用是广泛的,而且实践与理论学习是有很大不同的。

1. 首先,要对一个事件有一个非常清楚了解,包括它的常规与非常规的现象,已经在这个事件中可能出现的一些特殊的情况等等。

2. 其实,要把自己已知的事件,转变为一个程序思想,这个转化过程是应用的关键,也是难点所在,这要求自己对C++的理论有一个较好的掌握,转化为自己的程序思想。

3. 最后,把自己的程序思想转化为现实的程序,这更要很大的耐力,通过反复的试验也能得到最好的结果。

综上所述,C++课是有实用性的,课程设计是必要的!

本文来源:https://www.2haoxitong.net/k/doc/6a7f978371fe910ef12df81c.html

《C++语言课设 学生成绩管理系统,零一版本.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式