课程设计之学生成绩管理系统

/**********************************************
*文件名称:学生成绩管理系统
*文件标识:无
*内容摘要:实现学成成绩的输入、插入、删除、修改、排序和输出
*其他内容:无
*当前版本: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)

  • 13
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值