c语言 学生管理系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 学生管理系统相关的知识,希望对你有一定的参考价值。

c语言编写 学生管理系统

1.1 管理员功能
1.1.1 学生信息定义
属性:必选
描述:学生信息必须包含如下项(包括但不限于):
● 学号(ID):ID要求全局唯一、不可重复;● 姓名;● 密码;● 班级;● 成绩(至少3门);● 年龄;● 名次(本学生在本班级的成绩总分排名,自动计算,非输入);
1.1.2 管理员信息定义
描述:管理员信息必须包含如下项(包括但不限于):
● 用户名;
● 密码;
1.1.3 增加学生
描述:管理员能够增加学生。
1.1.4 保存
描述:学生信息既能够在内存中存在,也能够存于磁盘中,掉电后信息不丢失。必须完成下面两种情况:
● 在内存中,所有学生的信息以链表的方式存在;
● 在硬盘中,以文件形式存在(文件格式不限、内容形式不限)。
1.1.5 删除
描述:管理员能够删除学生,完成下列情况的任一种即可:
● 一条一条删除(例如根据ID删除);
● 批量删除(例如根据某种区间删除)。
1.1.6 修改
描述:管理员能够修改学生,完成下列情况的任一种即可:
● 一项一项地修改(如提示是否修改哪一项,是学号还是姓名);
● 批量修改(例如一下子修改好学号、姓名、成绩……等)。
1.1.7 查询
描述:能够查询某些学生信息,必须完成下列所有情况:
● 根据姓名;
● 根据单科成绩;
● 根据排名;
1.1.8 排序
描述:能够按序显示学生信息,排序算法不限,必须完成下列所有情况:
根据姓名;
根据单科成绩;
根据排名;
1.2 学生用户功能
1.2.1 查看个人信息
描述:学生能够登录系统查看个人信息。
1.2.2 修改密码
描述:学生能够登录系统中修改个人密码,必须完成下列所有情况:
● 检验旧密码是否正确,如不正确提示重新输入旧码;
● 如正确,检验两次输入的新密码是否一致,如不一致,提示重新输入密码,如一致,用新密码覆盖旧密码;
1.3 登陆
描述:管理员和学生能够登陆到系统中,必须有密码出错提示,输入错误超过三次则自动退出系统。

求大神啊!!!

参考技术A #include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Node//定义链表结点


char* class_0;//班级
int number;
char* name;//姓名
float elec;//电子技术成绩
float c_prog;//C程序设计成绩
float media;//多媒体技术成绩
float eng;//大学英语成绩
float math;//高等数学成绩
float sport;//大学体育成绩
float polity;//马克思主义政治经济学成绩
float ave;//平均成绩
int order;//名次
Node* link;
Node()link=NULL;
Node(int _number,char* _class_0,char* _name,float _elec,
float _c_prog,float _media,float _eng,float _math,
float _sport,float _polity,float _ave,int _order,Node* next)

number=_number;
class_0=new char[21];
strcpy(class_0,_class_0);
name=new char[9];
strcpy(name,_name);
elec=_elec;
c_prog=_c_prog;
media=_media;
eng=_eng;
math=_math;
sport=_sport;
polity=_polity;
ave=_ave;
order=_order;
link=next;

~Node()

delete []class_0;
delete []name;


;
class StudentScore

private:
Node* first;//链表的头指针
int choice;//选择数据的读入方式
int fileNum;//当前文件数减一
int fileLoc;//定位当前文件
string* fileName;
int operChoice;
int RecordLength;
public:
StudentScore();
void Save();
void BuildList();//手工建立成绩链表
void ReadInfo(int k);//从内存中读入学生信息
void ClearList();
void Statistic();
void Sort();
void Add();
void Delete();
void PrintList();
void Menu();
;
StudentScore::StudentScore()

RecordLength=0;
operChoice=0;
first=NULL;
choice=0;
fileLoc=0;
fileNum=0;
fileName=new string[10];//最多可以存10个文件

int GetOrder(Node* first,float ave);
void StudentScore::BuildList()

int _number;//学号
char* _class_0=new char[21];//班级
char* _name=new char[9];//姓名
float _elec;//电子技术成绩
float _c_prog;//C程序设计成绩
float _media;//多媒体技术成绩
float _eng;//大学英语成绩
float _math;//高等数学成绩
float _sport;//大学体育成绩
float _polity;//马克思主义政治经济学成绩
float _ave;//平均成绩
int _order;//名次
char c;
Node *p,*r=NULL;
first=NULL;
cout<<"您要输入学生成绩信息?"<<endl;
while((c=getchar())=='n');
while(tolower(c)!='n')

cin>>_class_0;//班级
cin>>_number;
cin>>_name;//姓名
cin>>_elec;
cin>>_c_prog;
cin>>_media;
cin>>_eng;
cin>>_math;
cin>>_sport;
cin>>_polity;
_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
_order=GetOrder(first,_ave);

p=new Node(_number,_class_0,_name,_elec,
_c_prog,_media,_eng,_math,_sport,_polity,
_ave,_order,NULL);//建立一个新的结点储存信息

if(first!=NULL)
r->link=p;
else first=p;
r=p;
RecordLength++;
cout<<"您要输入学生成绩信息?"<<endl;
while((c=getchar())=='n');


int GetOrder(Node* first,float ave)//名次记录有严重问题

int order=1;
Node* temp=first;
for(;temp;temp=temp->link)
if(temp->ave>ave) order++;
if(temp->ave<ave) (temp->order)++;

return order;


void StudentScore::Statistic()

Node* temp=first;
float a_elec=0.0;//电子技术成绩
float a_c_prog=0.0;//C程序设计成绩
float a_media=0.0;//多媒体技术成绩
float a_eng=0.0;//大学英语成绩
float a_math=0.0;//高等数学成绩
float a_sport=0.0;//大学体育成绩
float a_polity=0.0;//马克思主义政治经济学成绩
int i=0;
while(temp)

a_elec+=temp->elec;
a_c_prog+=temp->c_prog;
a_media+=temp->media;
a_eng+=temp->eng;
a_math+=temp->math;
a_sport+=temp->sport;
a_polity+=temp->polity;
i++;
temp=temp->link;

a_elec=a_elec/i;
a_c_prog=a_c_prog/i;
a_media=a_media/i;
a_eng=a_eng/i;
a_math=a_math/i;
a_sport=a_sport/i;
a_polity=a_polity/i;
cout<<"电子技术平均成绩为:"<<a_elec<<endl;
cout<<"c程序设计平均成绩为:"<<a_c_prog<<endl;
cout<<"多媒体技术平均成绩为:"<<a_media<<endl;
cout<<"英语平均成绩为:"<<a_eng<<endl;
cout<<"高等数学平均成绩为:"<<a_math<<endl;
cout<<"体育平均成绩为:"<<a_sport<<endl;
cout<<"政治平均成绩为:"<<a_polity<<endl;

void StudentScore::Delete()

int studNum;
Node* p;
Node* temp=first;
cout<<"请输入要删除的学生学号"<<endl;
cin>>studNum;
float average;
for(;temp;temp=temp->link)

cout<<temp->number;

if(temp->number==studNum)

average=temp->ave;

if(temp==first)//说明是第一次

first=first->link;
delete temp;
break;//如果不跳出的话 temp=temp->link会出错

else

p->link=temp->link;
delete temp;
break;


p=temp;
RecordLength--;


//下面修改学生排名
temp=first;
for(;temp;temp=temp->link)
if(temp->ave<average) temp->order--;


void StudentScore::Add()

int _number;//学号
char* _class_0=new char[21];//班级
char* _name=new char[9];//姓名
float _elec;//电子技术成绩
float _c_prog;//C程序设计成绩
float _media;//多媒体技术成绩
float _eng;//大学英语成绩
float _math;//高等数学成绩
float _sport;//大学体育成绩
float _polity;//马克思主义政治经济学成绩
float _ave;//平均成绩
int _order;//名次
char c;
Node *p,*r=NULL;
r=first;
while(r->link)
r=r->link;

// first=NULL;
cout<<"您要输入学生成绩信息?"<<endl;
while((c=getchar())=='n');
while(tolower(c)!='n')

cin>>_class_0;//班级
cin>>_number;
cin>>_name;//姓名
cin>>_elec;
cin>>_c_prog;
cin>>_media;
cin>>_eng;
cin>>_math;
cin>>_sport;
cin>>_polity;
_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
//写一个返回排名的程序
_order=GetOrder(first,_ave);

p=new Node(_number,_class_0,_name,_elec,
_c_prog,_media,_eng,_math,_sport,_polity,
_ave,_order,NULL);//建立一个新的结点储存信息

if(first!=NULL)
r->link=p;
else first=p;
r=p;
RecordLength++;
cout<<"您要输入学生成绩信息?"<<endl;
while((c=getchar())=='n');



void StudentScore::Sort()//简单bubble排序从高分到低分排序

int i=0;
Node* temp=first;
Node* before;
// Node* p=first;
for(;temp->link;)

if(temp->ave<temp->link->ave)


if(temp==first)//说明是第一个结点

first=first->link;
// p=temp;
// temp=temp->link;
temp->link=temp->link->link;
first->link=temp;
before=first;

else//不是第一个结点

before->link=temp->link;
temp->link=temp->link->link;
before->link->link=temp;
before=before->link;


else

temp=temp->link;


i++;//计算次数

for(;i>0;i--)

temp=first;
for(int j=0;j<i;j++)

if(temp->ave<temp->link->ave)

cout<<"small!"<<endl;
if(temp==first)//说明是第一个结点

first=first->link;
// p=temp;
// temp=temp->link;
temp->link=temp->link->link;
first->link=temp;
before=first;

else//不是第一个结点

before->link=temp->link;
temp->link=temp->link->link;
before->link->link=temp;
before=before->link;


else

temp=temp->link;





/*
bool IsSorted(Node* first)

for(;first;first=first->link)
if(first->ave<first->link->ave) return false;
return true;
*/

void StudentScore::PrintList()//打印链表程序

cout<<"The list contains:"<<endl;
Node* temp=first;
for(;temp;temp=temp->link)

cout<<temp->class_0<<","<<temp->name<<endl;
cout<<temp->order<<endl;



void StudentScore::ClearList()//清除链表

Node* p=new Node;
while(first)

p=first->link;
delete first;
first=p;



//读函数
void StudentScore::ReadInfo(int k)//读第k个文件的信息存入链表

// int wordLength;//记录子段长度
int _number;//学号
char* _class_0=new char[21];//班级
char* _name=new char[9];//姓名
float _elec;//电子技术成绩
float _c_prog;//C程序设计成绩
float _media;//多媒体技术成绩
float _eng;//大学英语成绩
float _math;//高等数学成绩
float _sport;//大学体育成绩
float _polity;//马克思主义政治经济学成绩
float _ave;//平均成绩
int _order;//名次
Node *p,*r=NULL;
first=NULL;
ifstream Infile(fileName[k].c_str());
if(!Infile)

cout<<"file is not present!"<<endl;
return;

Infile>>RecordLength;
cout<<RecordLength;
for(int i=0;i<RecordLength;i++)

Infile>>_class_0;//班级
// cout<<_class_0;
Infile>>_number;
Infile>>_name;//姓名
Infile>>_elec;
Infile>>_c_prog;
Infile>>_media;
Infile>>_eng;
Infile>>_math;
Infile>>_sport;
Infile>>_polity;
Infile>>_ave;
Infile>>_order;
_ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//求得平均成绩
//写一个返回排名的程序
_order=GetOrder(first,_ave);

p=new Node(_number,_class_0,_name,_elec,
_c_prog,_media,_eng,_math,_sport,_polity,
_ave,_order,NULL);//建立一个新的结点储存信息

if(first!=NULL)
r->link=p;
else first=p;
r=p;



void StudentScore::Save()

string tempName;
cout<<"请输入将要保存的文件名:"<<endl;
//要判断是否跟现有文件重名
cin>>tempName;
ofstream savefile(tempName.c_str());//要做一个转换
Node* temp=first;
savefile<<RecordLength<<endl;
for(;temp;temp=temp->link)

savefile<<temp->class_0<<" "<<temp->number<<" "<<temp->name<<" "<<temp->elec<<" "
<<temp->c_prog<<" "<<temp->media<<" "<<temp->eng<<" "<<temp->math<<" "
<<temp->sport<<" "<<temp->polity<<" "<<temp->ave<<" "<<temp->order<<endl;

savefile.close();

//读取文件表信息
ifstream Readfileinfo("FileRecord.txt");
Readfileinfo>>fileNum;
for(int i=0;i<fileNum;i++)
Readfileinfo>>fileName[i];
Readfileinfo.close();
fileNum++;
fileName[i]=tempName;
//修改文件表信息
ofstream changefile("FileRecord.txt");
changefile<<fileNum<<endl;
for(i=0;i<fileNum;i++)
changefile<<fileName[i]<<endl;
changefile.close();


void StudentScore::Menu()

cout<<"请您选择数据的读入方式:"<<endl;
cout<<"(1) 重新手动建立一份新的数据表"<<endl;
cout<<"(2) 从文件中读入数据"<<endl;
cout<<"请选择:";
cin>>choice;
if(choice==1)

BuildList();

if(choice==2)

cout<<"当前有如下文件,请选择读入文件:"<<endl;
ifstream fileRecord("fileRecord.txt");
if(!fileRecord)

cout<<"fileRecord is not present!"<<endl;
return;

fileRecord>>fileNum;
cout<<"当前有"<<fileNum<<"个文件:"<<endl;
for(int i=0;i<fileNum;i++)

fileRecord>>fileName[i];
cout<<fileName[i]<<" ";

cout<<"请您选择一个文件:";
cin>>fileLoc;
ReadInfo(fileLoc-1);
PrintList();


cout<<"请选择您需要的操作:"<<endl;
cout<<"(1) 统计学生各科成绩"<<endl;
cout<<"(2) 删除某个学生成绩记录"<<endl;
cout<<"(3) 增加某个学生成绩记录"<<endl;
cout<<"(4) 在链表中为所有学生成绩记录排序"<<endl;
cin>>operChoice;
if(operChoice==1)
Statistic();
if(operChoice==2)
Delete();
if(operChoice==3)
Add();
if(operChoice==4)
Sort();
Save();
ClearList();


int main()

cout<<"//////////////////////////////////"<<endl;
cout<<"欢迎使用学生成绩管理系统!"<<endl;
cout<<"//////////////////////////////////"<<endl;
cout<<endl;
cout<<endl;
StudentScore s;
s.Menu();
return 0;

C语言学生信息管理系统未完成部分!

C语言的大神们,程序编译运行是没有毛病,但是用system("pause")卡住看程序地址怎么出现这样的毛病?本人新手一枚,请各位大神指点一下!谢谢。

参考技术A 这个我c语言结构与链表的作业:
#include
#include

struct staff
char num[6]; //学号
char name[20]; //姓名
double wage; //成绩
struct staff *next;
;

/**
*输入数据
*/
struct staff *create(int n)
struct staff *head=NULL;
struct staff *tail,*newnode;
char num[6],name[20];
double wage;
for(int i=0;i<n;i++)
newnode = new staff;
scanf("%s",num);
scanf("%s",name);
scanf("%lf",&wage);
strcpy(newnode->num,num);
strcpy(newnode->name,name);
newnode->wage=wage;
if(head==NULL)
head = newnode;
else
tail->next = newnode;
tail=newnode;

tail->next=NULL;
return(head);


/**
*删除数据
*/
struct staff *deln(struct staff *head,int n)
struct staff *p,*q;
int i=0;
p=head;
while(++i!=n && p->next!=NULL)
q=p;
p=p->next;

if(i==n)
if(p==head) head=p->next;
else q->next=p->next;
delete(p);
else
printf("Not been found!\n");
return(head);


/**
*显示数据
*/
void showdate(struct staff *head)
struct staff *p=head;
int i=1;
while(p!=NULL)
printf("%d| %s,%s,%.2f\n",i++,p->num,p->name,p->wage);
p=p->next;



void main()
struct staff *head;
int n;
printf("请输入初始链表结点数 ");
scanf("%d",&n);
head=create(n);
printf("删除前:\n");
showdate(head);
int m=0;
while(mn)
printf("请输入要删除的结点号:\n");
scanf("%d",&m);

head=deln(head,m);
printf("删除后:\n");
showdate(head);

以上是关于c语言 学生管理系统的主要内容,如果未能解决你的问题,请参考以下文章

c语言 学生管理系统

c语言大作业 学生成绩管理系统

学生成绩管理系统的c语言程序

学生信息管理系统(C语言)

学生成绩管理系统 用C语言编写

c语言编写学生信息管理系统