学生学籍管理系统c++课程设计.docx

上传人:b****5 文档编号:6702730 上传时间:2023-01-09 格式:DOCX 页数:21 大小:44.28KB
下载 相关 举报
学生学籍管理系统c++课程设计.docx_第1页
第1页 / 共21页
学生学籍管理系统c++课程设计.docx_第2页
第2页 / 共21页
学生学籍管理系统c++课程设计.docx_第3页
第3页 / 共21页
学生学籍管理系统c++课程设计.docx_第4页
第4页 / 共21页
学生学籍管理系统c++课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

学生学籍管理系统c++课程设计.docx

《学生学籍管理系统c++课程设计.docx》由会员分享,可在线阅读,更多相关《学生学籍管理系统c++课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

学生学籍管理系统c++课程设计.docx

学生学籍管理系统c++课程设计

《学生学籍管理系统》

程序设计基础课程设计报告

专业:

班级:

学号:

姓名:

指导教师:

二OO八年六月二十六日

C++课程设计—-学籍管理系统实验报告

1、对C++设计的《学生学籍管理系统》总体说明

我这次做的课程设计是《学生学籍管理系统》,本程序采用C++程序语言编写,运用了基于对象和面向对象的程序设计。

它主要是完成对学生的基本信息和成绩进行录入、查询和删除功能。

实施起来简单快捷,虽然程序简单,但可以作为老师的辅助软件对学生的基本信息和各科成绩进行管理.

2、总体设计

本程序的流程图如下:

3、对《学生学籍管理系统》的介绍

(1)具体功能:

a)数据录入功能:

对B。

TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据.综合成绩、学分由程序根据条件自动运算

(2)查询功能:

分为学生基本情况查询和成绩查询两种:

A:

学生基本情况查询:

A1-—--输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。

A2-—-输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。

B:

成绩查询:

B1:

输入一个学号时,查询出此生的所有课程情况,格式如下:

学号:

xx姓名:

xxxxx

课程编号:

xxx课程名称:

xxxxx综合成绩:

xxxx实得学分:

xx

课程编号:

xxx课程名称:

xxxxx综合成绩:

xxxx实得学分:

xx

课程编号:

xxx课程名称:

xxxxx综合成绩:

xxxx实得学分:

xx

………………………

共修:

xx科,实得总学分为:

xxx

b)删除功能:

当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息.

c)排序功能:

能实现选择按综合成绩或实得学分升序或降序排序并显示数据。

(2)源程序说明:

   源程序清单及注释如下:

#include

#include

#include〈iomanip>

usingnamespacestd;

classBasic

{

public:

virtualintinput(ifstream&its)=0;

virtualvoidinput()=0;

virtualvoiddisplay(ofstream&its)=0;

virtualvoiddisplay()=0;

virtualvoiddisplay_1(){}

friendclassCollege;

protected:

//把这些数放在这,方便调用

Basic*next;//指针

intnumber;//学号

charname[40];//姓名

intdom_number;//宿舍号

doublemark;//综合成绩

intcredit;//实得学分

};

classStudent:

virtualpublicBasic

public:

intinput(ifstream&its)//输入流

its〉>number;

if(number==-1)

return0;

else

its>>name>〉sex〉〉dom_number〉〉phone_number;

return1;

}

voidinput()//输入

cout<〈"学号:

";

cin〉>number;

cout〈<"姓名:

”;

cin〉〉name;

cout<<”性别:

";

cin>>sex;

cout〈<"宿舍号码:

”;

cin>〉dom_number;

cout<<”电话号码:

";

cin>>phone_number;

}

voiddisplay(ofstream&its)//输出流

{

its〈

voiddisplay()//输出

cout〈

private:

charsex[5];//性别

charphone_number[20];//电话号码

};

classCourse:

virtualpublicBasic

public:

intinput(ifstream&its)//输入流函数

its〉>number;

if(number==-1)

return0;

else

{

its>〉chass_number>〉chass_name〉>

chass_mark〉>peacetime_mark>〉experiment_mark〉〉txt_mark;

account();

return1;

}

}

voidinput()//输入函数

cout〈〈”学号=";

cin〉>number;

cout〈〈"课程编号=”;

cin>〉chass_number;

cout〈〈"课程名称=”;

cin>〉chass_name;

cout<〈”学分=";

cin>>chass_mark;

cout<<”平时成绩=”;

cin>〉peacetime_mark;

cout<<"实验成绩=";

cin〉〉experiment_mark;

cout〈<”卷面成绩=”;

cin〉〉txt_mark;

account();

}

voidaccount()//计算综合成绩和实得学分

{

inti;

if(experiment_mark==-1)

mark=peacetime_mark*0.15+experiment_mark*0。

15+txt_mark*0.7;

elsemark=peacetime_mark=peacetime_mark*0.3+txt_mark*0。

7;

i=mark/10;

switch(i)

{

case10:

credit=chass_mark;break;

case9:

credit=chass_mark;break;

case8:

credit=chass_mark*0。

8;break;

case7:

credit=chass_mark*0.7;break;

case6:

credit=chass_mark*0.6;break;

default:

credit=0;break;

voiddisplay(ofstream&its)//输出流函数

{

its〈〈number<〈"”<

peacetime_mark〈〈""〈

voiddisplay()//输出函数

cout〈〈number〈

peacetime_mark〈

voiddisplay_1()

{

cout〈<"课程编号:

"<

"<

<<"”〈<"综合成绩:

”〈〈mark<<"”〈〈”实得学分:

"〈

private:

charchass_number[30];//课程编号

charchass_name[30];//课程名称

intchass_mark;//学分

intpeacetime_mark;//平时成绩

intexperiment_mark;//实验成绩

inttxt_mark;//卷面成绩

};

classCollege//链表类

{

public:

College(inti)//构造函数建立初链,i=0建立Student链表,i=1建立Course链表

{

ji=0;

Basic*p;

intt;

PL=i;

if(PL==0)//根据PL,打开相应的文件

{

f。

open("A。

txt”,ios:

in);

head=newStudent;

p=newStudent;

}

else

f.open("B。

txt”,ios:

in);

head=newCourse;

p=newCourse;

}

if(!

f)//判断f是否打开文件

{

cout<〈”错误"〈

abort();

}

t=head—〉input(f);

head-〉next=p;

p-〉next=NULL;

for(;;)//读入文件数据,并将数据插入链表中

if(i==0)

p=newStudent;

elsep=newCourse;

t=p->input(f);

if(t==0)

break;

head=Build(p);

f.close();//关闭文件

}

~College()

{

save();

Basic*Build(Basic*p)//插入函数,将p有序的插入链表中

{

Basic*p1=head,*p2=head;

inti;

for(i=0;p1->next!

=NULL;i++)

if(i==0&&p—〉numbernumber)//处理头链

{

p—〉next=p1;

head=p;

ji++;

break;

}

elseif(p—>number

{

p2—>next=p;

p->next=p1;

ji++;

break;

elseif(i==ji)//处理尾

{

p2=p1;

p1=p1—>next;

p2—>next=p;

p->next=p1;

ji++;

break;

p2=p1;

p1=p1—〉next;

returnhead;

voiddisplay()//输出链表信息

{

Basic*a=head;

for(;a—〉next!

=NULL;a=a->next)

a->display();

}

voidfind_number()//查找学号(student)

{

inti;

Basic*h=head;

cout〈〈"请输入你想找的学号:

”;

cin〉>i;

for(;h-〉next!

=NULL;h=h-〉next)

if(h—>number==i)

h—〉display();

break;

}

}

voidfind_name()//查找姓名(student)

{

chari[40];

Basic*h=head;

cout〈<"请输入你想找的姓名:

";

cin>>i;

for(;h—>next!

=NULL;h=h->next)

if(strcmp(h—〉name,i)==0)

h-〉display();

break;

voidfind_dom_number()//查找宿舍号码(student)

inti;

Basic*h=head;

cout〈〈"请输入你想找的宿舍号码:

";

cin>〉i;

for(;h-〉next!

=NULL;h=h—〉next)

if(h-〉dom_number==i)

h->display();

}

Basic*get_head()

{

returnhead;

}

voidfind(Basic*a)//输入一个学号时,查询出此生的所有课程情况(Course)

{

inti;

Basic*h=head;

cout〈〈"请输入你想查的学号:

”;

cin>〉i;

for(;a-〉next!

=NULL;a=a->next)

{

if(a-〉number==i)

{

cout<<”学号:

”〈

cout<<”姓名:

”<

break;

}

for(;h-〉next!

=NULL;h=h-〉next)

if(h—〉number==i)

h—>display_1();

}

voidDelete(intj)//删除,j表示学号

Basic*p1=head,*p2=head;

inti=0;

for(;p1—>next!

=NULL;)

if(i==0&&p1—>number==j)//处理头

head=p1->next;

i=-1;//保证下次还可以删除头链

}

elseif(p1—〉number==j)//处理尾

p2-〉next=p1->next;

}

p2=p1;

p1=p1-〉next;

i++;

voiddelete_student(College&b)//当在A.TXT中删除一个学生时,自动地在B。

TXT中删除此人所有信息(student)

inti;

cout〈〈”请输入你想删除的学生的学号:

”;

cin>〉i;

Delete(i);

b。

Delete(i);

}

voidtaxis_mark()//综合成绩排序(Course)

{

Basic*a=head;

Basic*m[90],*t;

inti,j,k,b;

cout〈<”升序-1降序-2”<

cin〉〉b;

if(b==1)//升序

{

for(i=0;a->next!

=NULL;i++)

{

m[i]=a;

a=a->next;

for(j=0;j〈i;j++)

for(k=j;k〈i;k++)

if(m[j]->mark〉m[k]—〉mark)

{

t=m[j];

m[j]=m[k];

m[k]=t;

}

cout〈〈”按综合成绩升序排序为”<〈endl;

for(j=0;j

m[j]—>display();

}

elseif(b==2)//降序

{

for(i=0;a—>next!

=NULL;i++)

m[i]=a;

a=a-〉next;

for(j=0;j〈i;j++)

for(k=j;k〈i;k++)

{

if(m[j]—>mark〈m[k]->mark)

t=m[j];

m[j]=m[k];

m[k]=t;

}

cout〈<"按综合成绩降序排序为”〈

for(j=0;j〈i;j++)

m[j]—〉display();

}

voidtaxis_credit()//学分排序(Course)

{

Basic*a=head;

Basic*m[90],*t;

inti,j,k,b;

cout〈〈"升序-1降序—2"〈〈endl;

cin>〉b;

if(b==1)//升序

for(i=0;a—〉next!

=NULL;i++)

m[i]=a;

a=a—〉next;

}

for(j=0;j

for(k=j;k〈i;k++)

{

if(m[j]—>credit〉m[k]—〉credit)

t=m[j];

m[j]=m[k];

m[k]=t;

cout<<”按学分升序排序为"〈

for(j=0;j〈i;j++)

m[j]-〉display();

elseif(b==2)//降序

for(i=0;a—>next!

=NULL;i++)

{

m[i]=a;

a=a->next;

for(j=0;j〈i;j++)

for(k=j;k

if(m[j]—〉credit〈m[k]-〉credit)

{

t=m[j];

m[j]=m[k];

m[k]=t;

}

cout〈〈”按学分降序排序为"<〈endl;

for(j=0;j〈i;j++)

m[j]-〉display();

voidsave()//保存函数

Basic*h=head;

inti=-1;

if(PL==0)

s。

open(”A.txt",ios:

:

out);

elseif(PL==1)

s。

open("B。

txt",ios:

out);

for(;h-〉next!

=NULL;h=h-〉next)

h—〉display(s);

s<〈i<

s。

close();

private:

ifstreamf;

ofstreams;

Basic*head;//链表的头指针

intji;//计算插入的数

intPL;//判断建立怎样的链表

};

intmain()

{

inti,k[10];

Course*c;

Collegea(0),b

(1);

cout〈〈"*************************欢迎进入!

**********************”<

cout<<”*************************学籍管理系统**********************"<

cout〈〈"****************"〈〈endl;

cout<<"****************”<〈endl;

to:

cout〈<”********<1>录入〈2〉查询〈3〉删除********"<

cout〈<"****************”<

cout〈〈"********〈4>排序<5>全部输出<其他〉结束********"<〈endl;

cout<〈"****************”〈

cout<〈"     ****************"<

cout〈<”     ***********************************************************"〈〈endl;

cin>>i;

if(i==1)

c=newCourse;

c—〉input();

b.Build(c);

gototo;

elseif(i==2)

{

cout<〈”1—学生基本情况查询2-成绩查询”〈

cin>>k[0];

if(k[0]==1)

cout<<"1—学号查询2-姓名查询3—宿舍号码查询"〈

cin〉〉k[1];

if(k[1]==1)

a.find_number();

elseif(k[1]==2)

a.find_name();

elseif(k[1]==3)

a。

find_dom_number();

gototo;

}

elseif(k[0]==2)

b。

find(a。

get_head());

gototo;

elseif(i==3)

{

a。

delete_student(b);

gototo;

elseif(i==4)

cout<<”1—综合成绩排序2-实得学分排序"〈〈endl;

cin>〉k[2];

if(k[2]==2)

b.taxis_credit();

elseif(k[2]==1)

b。

taxis_mark();

gototo;

elseif(i==5)

cout〈〈”学号姓名性别宿舍号码电话号码"<

a。

display();

cout〈

cout<<"学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分”<〈endl;

b。

display();

gototo;

return0;

}

4、遇到问题及解决方案

本程序是运用类编写但与平时作业不同的是难度较大,涉及内容较广。

特别是要用到动态链表和对文件进行操作.而链表老师只是平

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1