*文件名称:学生成绩管理系统
*文件标识:无
*内容摘要:实现学成成绩的输入、插入、删除、修改、排序和输出
*其他内容:无
*当前版本:codeblocks
*完成日期:2016.12.27
*版本号:codeblocks
*创作人:邹晓琳
*************************************************/
头文件
chengji.h
#ifndef chengji
#define chengji
#include <string> //string 类型
using namespace std;
typedef struct LNode//学生结构体
{
string name;
string num;
string classname;
float Cmark;
float Math;
float English;
struct LNode *next;//指针域,指向后继节点
} LinkList;
void addstudent(LNode *a);//添加学生函数的声明
int num(LNode *a);//判断学号是否重复的函数的声明
void NewNode();//创建新的一个学生结构体,新节点
void read();//从文件中读取信息
void DestroyList(LinkList *&head);//销毁线性表
void ListLength(LinkList *L);//求学生个数
void DispList();//输出线性表
void deletestudent();//删除学生信息
void findstudentname();//按姓名查找学生
void findstudentnum();//按学号查找学生
void ChangeMarkByNum();//根据学号修改学生成绩
void shuchujiedian(LNode *p);//输出一个结点信息
void DesplayMarkSegment();//输出不及格的学生成绩
void paixu();//按平均成绩排序并输出成绩
void Save();//保存链表数据到文件
void Menu();//显示菜单
#endif
各个函数代码
chengji.cpp
#include <iostream>
#include<stdio.h>
#include<conio.h>//catch() 任意键继续
#include <windows.h>//system("cls") 清屏
#include"chengji.h"
extern struct LNode *head;
/************************************
* 功能描述:申请一个新结点,并将其初始化
* 输入参数:无
* 输出参数:无
************************************/
void InitList(LinkList *&L)//创建一个头结点
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
/************************************
* 功能描述:创建新的一个学生结构体,新节点。
* 输入参数:无
* 输出参数:无
************************************/
void NewNode()// 创建完成调用addstudent()函数将新节点尾插法插入链表
{
LNode *a;
a=new LNode;//申请空间
cout<<"学生姓名"<<endl;
cin>>a->name;
cout<<"学生学号"<<endl;
cin>>a->num;
cout<<"学生班级: "<<endl;
cin>>a->classname;
cout<<"c语言: "<<endl;
cin>>a->Cmark;
cout<<"高数: "<<endl;
cin>>a->Math;
cout<<"英语 "<<endl;
cin>>a->English;
addstudent(a);
}
/************************************
* 功能描述:从文件中读学生信息到链表中
* 输入参数:无
* 输出参数:无
************************************/
void read()//从文件中读取信息
{
FILE *fp;
LNode *p;
fp=fopen("d://zou.txt","r");//以可读方式打开zou.txt文件
if(!fp)
{
printf("文件不存在\n");
return;
}
p=new LNode;
char z[30];//临时的字符数组,用来装TXT中的字符串
char b[30];
char c[30];
string e,f,g;
while(fscanf(fp,"%s %s %s %f %f %f\n",z,b,c,&p->Cmark,&p->Math,&p->English)>0)//将TXT文件中第一行数据写入到P节点的各项内容中
{
string e (z);//将字符数组转化为string类型。
string f (b);
string g (c);
p->name=e;
p->num=f;
p->classname=g;
addstudent(p);//添加该节点P到链表中
p=new LNode;//再次为P申请新的空间
}
fclose(fp);//关闭文件
}
void addstudent(LNode *a)//添加学生
{
LNode *p;
if(head==NULL)//如果链表为空
{
head =a;
a->next=NULL;
return;//插入完成返回
}
else
{
if(num(a)==1)//判断学号是否重复
{
p = head;//从头结点开始找
while(p)//p非空则一直循环
{
if(p->next==NULL)//找到尾节点
{
p->next =a;
a->next =NULL;
return;//插入完成返回
}
p= p->next;//找下一个节点
}
}
else
cout<<"学号已重复"<<endl;
}
}
/************************************
* 功能描述:销毁线性表
* 输入参数:无
* 输出参数:无
************************************/
void DestroyList(LinkList *&head)