注:本程序由Visual Studio 2015编写,与VC++6.0稍有区别,复制到VC++6.0注释掉“#include “stdafx.h””即可运行,复制到VS可直接运行。
#include “stdafx.h”

#include “iostream”

#include “string”

#define OK 1

#define ERROR 0

using namespace std;

typedef int status;

typedef struct {

int examnum;string name;string gender;int age;int Chinese;int Maths;int English;float everage;int sum;

}ElemType;

typedef struct LNode {

ElemType data;struct LNode *next;

}LNode, *LinkList;

LinkList L;

void CreateList(LinkList &L, int n);

status ListInsert(LinkList &L, int i, ElemType e);

status ListDelete(LinkList &L, int i, ElemType &e);

int LocateElem(LinkList L, ElemType e);

status GetElem(LinkList L, int i, ElemType &e);

int ListLength(LinkList L);

void ListTraverse(LinkList L);

void UpdateByNo(LinkList &L, int examnum);

void Operation();

void Flunk(LinkList L, int i);

void Ranking(LinkList &L);

//创建考生信息的线性表(带头结点的单链表)

void CreateList(LinkList &L, int n) {

L = new LNode;  //新结点L->next = NULL;  //头结点 空ElemType e;LinkList s, p = L;cout << endl << "\t初始化链表完成并生成了头结点!" << endl;for (int i = 0; i < n; i++) {s = new LNode;cout << "\t请输入第" << i + 1 << "个考生的信息:" << endl;cout << "\t  准考证号:"; cin >> s->data.examnum;cout << "\t  考生姓名:"; cin >> s->data.name;cout << "\t  考生性别:"; cin >> s->data.gender;cout << "\t  考生年龄:"; cin >> s->data.age;cout << "\t  语文成绩:"; cin >> s->data.Chinese;cout << "\t  数学成绩:"; cin >> s->data.Maths;cout << "\t  英语成绩:"; cin >> s->data.English;s->data.sum = s->data.Chinese + s->data.English + s->data.Maths;s->data.everage = s->data.sum / 3.0;p->next = s;p = s;}p->next = NULL;

}

//在线性表的某个位置上插入考生信息

status ListInsert(LinkList &L, int i, ElemType e) {

LinkList p = new LNode;p = L;//p指向头结点int j = 0;while (p&&j < i-1){p = p->next;++j;}if (!p&&j > i-1){cout << endl << "\t插入失败" << endl << endl;return ERROR;}LNode *s;s = new LNode;s->data = e;s->next = p->next;p->next = s;cout << endl << "\t插入成功" << endl << endl;return OK;

}

//删除线性表中第i个考生的信息

status ListDelete(LinkList &L, int i, ElemType &e) {

LinkList p = new LNode;LinkList q = new LNode;p = L;int j = 0;while (p->next&&j < i-1) {p = p->next; j++;}if (!(p->next) || j > i-1) {return ERROR;}q = p->next;p->next = q->next;e = q->data;delete q;return OK;

}

//根据考号查询某考生的位序

int LocateElem(LinkList L, ElemType e) {//在带头结点的单链表L中查找元素e

int i = 1, length = 0;LinkList p = new LNode;p = L->next;while ((i <= ListLength(L)) && (e.examnum != p->data.examnum)){i++;p = p->next;}if (i <= ListLength(L) && (e.examnum == p->data.examnum))return i;return 0;

}

//根据位序查询线性表中的考生信息

status GetElem(LinkList L, int i, ElemType &e) {

LinkList p = new LNode;p = L->next;int j = 1;while (p&&j < i) {p = p->next;j++;}if (!p || j > i)return ERROR;e = p->data;return OK;

}

//求线性表的长度

int ListLength(LinkList L) {

int length = 0;LinkList p = new LNode;p = L->next;while (p) {length++;p = p->next;}return length;

}

//输出线性表中的考生信息

void ListTraverse(LinkList L) {

int i = 1;LNode *p = L->next;cout << endl << "\t考生信息如下:" << endl;while (p){cout << "\t第" << i << "个考生的信息为:" << endl;cout << "\t  准考证号:" << p->data.examnum << endl;cout << "\t  考生姓名:" << p->data.name << endl;cout << "\t  考生性别:" << p->data.gender << endl;cout << "\t  考生年龄:" << p->data.age << endl;cout << "\t  语文成绩:" << p->data.Chinese << endl;cout << "\t  数学成绩:" << p->data.Maths << endl;cout << "\t  英语成绩:" << p->data.English << endl;cout << "\t  平均成绩:" << p->data.everage << endl;cout << "\t  总成绩:" << p->data.sum << endl << endl;p = p->next;i++;}cout << "\t输出完毕!" << endl << endl;

}

//根据考号修改线性表中的考生信息

void UpdateByNo(LinkList &L, int examnum) {

LinkList p = new LNode;p = L->next;int i = 1;while (p&&p->data.examnum != examnum) {p = p->next;i++;}if (i <= ListLength(L) && (examnum == p->data.examnum)) {cout << "\t请重新输入该考生的信息:" << endl << endl;cout << "\t  准考证号:"; cin >> p->data.examnum;cout << "\t  考生姓名:"; cin >> p->data.name;cout << "\t  考生性别:"; cin >> p->data.gender;cout << "\t  考生年龄:"; cin >> p->data.age;cout << "\t  语文成绩:"; cin >> p->data.Chinese;cout << "\t  数学成绩:"; cin >> p->data.Maths;cout << "\t  英语成绩:"; cin >> p->data.English;p->data.sum = p->data.Chinese + p->data.Maths + p->data.English;p->data.everage = p->data.sum / 3.0;cout << endl << "\t修改成功!" << endl << endl;}else cout << endl << "\t学号有误!" << endl << endl;

}

void Flunk(LinkList L, int i) {

LinkList p = new LNode;p = L->next;int flunkNum = 0;switch (i){case 1:cout << "\t   语文不及格名单如下:" << endl << endl;while (p) {if (p->data.Chinese < 60) {cout << "\t\t姓名:" << p->data.name;cout << "   语文:" << p->data.Chinese << endl << endl;flunkNum++;}p = p->next;}if (!flunkNum)cout << "\t    语文成绩全部及格!" << endl << endl;break;case 2:cout << "\t   数学不及格名单如下:" << endl << endl;while (p) {if (p->data.Maths < 60) {cout << "\t\t姓名:" << p->data.name;cout << "   数学:" << p->data.Maths << endl << endl;flunkNum++;}p = p->next;}if (!flunkNum)cout << "\t    数学成绩全部及格!" << endl << endl;break;case 3:cout << "\t   英语不及格名单如下:" << endl << endl;while (p) {if (p->data.English < 60) {cout << "\t\t姓名:" << p->data.name;cout << "   英语:" << p->data.English << endl << endl;flunkNum++;}p = p->next;}if (!flunkNum)cout << "\t    英语成绩全部及格!" << endl << endl;break;default:cout << endl << "\t   输入有误!" << endl << endl;break;}

}

void Ranking(LinkList &L) {

LinkList p = new LNode, q = new LNode;ElemType e;p = L->next;for (int i = 0; i < ListLength(L); i++) {if (p->next)q = p->next;for (int j = i + 1; j < ListLength(L); j++) {if (p->data.sum < q->data.sum) {e = p->data;p->data = q->data;q->data = e;}if (q)q = q->next;}if (p)p = p->next;}

}

void Operation() {//用户可以循环选择操作类型

int j = -1;while (j) {cout << "\t   1为插入\t\t 2为删除\t\t 3为查找" << endl;cout << "\t   4为修改\t\t 5为统计\t\t 6列出成绩单" << endl;cout << "\t   7查询不及格成绩\t 8根据总分排名\t\t 0为退出" << endl;cout << endl << "   请选择您要进行的操作:";cin >> j;cout << endl;switch (j) {case 1: { //插入cout << "   请输入你要插入的考生的位置:";int i;    cin >> i;ElemType e;cout << "   请输入考生信息:" << endl << endl;cout << "\t  准考证号:";        cin >> e.examnum;cout << "\t  考生姓名:";        cin >> e.name;cout << "\t  考生性别:";        cin >> e.gender;cout << "\t  考生年龄:";       cin >> e.age;cout << "\t  语文成绩:"; cin >> e.Chinese;cout << "\t  数学成绩:"; cin >> e.Maths;cout << "\t  英语成绩:"; cin >> e.English;e.sum = e.Chinese + e.Maths + e.English;e.everage = e.sum / 3.0;ListInsert(L, i, e);break;}case 2: {//删除cout << "   请输入你要删除的考生的考号:";ElemType e;    cin >> e.examnum;int i = LocateElem(L, e);if (i)if (ListDelete(L, i, e))cout << endl << "   删除成功!" << endl << endl;elsecout << endl << "   删除失败!" << endl << endl;else  cout << endl << "   不存在此考生!" << endl << endl;break;}case 3: {//查找cout << "   请输入你要查询的考生的序号:";int i; ElemType e; cin >> i;if (GetElem(L, i, e)) {cout << "\t第" << i << "个考生的信息为:" << endl;cout << "\t  准考证号:" << e.examnum << endl;cout << "\t  考生姓名:" << e.name << endl;cout << "\t  考生性别:" << e.gender << endl;cout << "\t  考生年龄:" << e.age << endl;cout << "\t  语文成绩:" << e.Chinese << endl;cout << "\t  数学成绩:" << e.Maths << endl;cout << "\t  英语成绩:" << e.English << endl << endl;}else{cout << "\t   序号有误!" << endl << endl;}break;}case 4: {//修改cout << "   请输入你要修改信息的考生的考号:";int examnum;cin >> examnum;UpdateByNo(L, examnum);break;}case 5: {//统计cout << "\t   报考人数为:" << ListLength(L) << endl << endl;ListTraverse(L);break;}case 6:ListTraverse(L); break;//输出case 7://列出不及格成绩cout << "\t   1语文\t   2数学\t   3英语" << endl << endl;cout << "\t请输入您要查询不及格科目的序号:";cin >> j;Flunk(L, j);break;case 8://根据总分排名Ranking(L);cout << endl << "   排名完成!成绩单如下:" << endl << endl;ListTraverse(L);break;case 0:   return;default:cout << endl << "该操作不存在,请输入正确操作!" << endl << endl;break;}}

}

//主函数,调用各个函数实现相应功能

void main() {

int n;cout << "\t\t\t\t*\t\t\t\t\t*";cout << endl << "\t\t\t\t*\t计科1512-02210151232-杨少通\t*" << endl;cout << "\t\t\t\t*****************************************" << endl << endl;cout << "   正在为您准备初始化链表,请输入您要输入的学生个数:";cin >> n;CreateList(L, n);//创建初始链表cout << endl << "   初始化成功," << n << "个考生的信息已存储。" << endl << endl;Operation();

}

本人初学数据结构,代码存在诸多问题,请各位看客多多指正。

(C语言)判断表达式中括号是否匹配考生管理系统(链表)-洋葱先生-杨少通相关推荐

  1. (C语言)十进制转换成R进制-洋葱先生-杨少通

    注:本程序由Visual Studio 2015编写,与VC++6.0稍有区别,复制到VC++6.0注释掉"#include "stdafx.h""即可运行,复 ...

  2. 函数:判断表达式括弧是否匹配

    [问题描述]编写算法函数:判断一表达式中的括号是否配对,包括中括号[].小括号()两种类型. [输入形式]输入一个只包含中括号和小括号的字符串. [输出形式]输出匹配结果:若匹配,输出match,如输 ...

  3. 栈应用:判断字符串中括号是否成对出现

    练习题目 利用栈先将后出的特性,判断字符串中的数字表达式括号是否成对匹配,如果没有给出错误位置信息提示. 代码实现 代码思路很简单,如果是左括号将左括号 就入栈,遇到右括号 栈中的左括号出栈.如果该出 ...

  4. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

  5. 判断语句_如何学好C语言判断语句?攻略if语句是第一步

    C语言,是全球使用最多的编程语言.上次我们谈到了switch语句,但在C语言中,if条件构成的选择结构程序很重要.在实际问题中,往往需要对不同变量进行比较,然后分别执行不同的语句.如何使用if语句呢? ...

  6. c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言研究性学习的路线 现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常"误导"读者,于是,"死记 ...

  7. c语言中c为字符型便量,c='97'是否正确,C语言判断题Word版

    <C语言判断题Word版>由会员分享,可在线阅读,更多相关<C语言判断题Word版(3页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击去 ...

  8. 13c语言中的文件是一种流式文件,读写时均以字符为单位.,C语言判断题部分.doc...

    C语言判断题部分 ?第一章 C语言中,字符数据用格式说明"%c"来输出,字符串数据用格式说明"%s"来输出.TC语言中,关键字及编译预处理命令用小写字母书写.T ...

  9. c语言表达式10 amp 6等于多少,C语言基础——表达式

    目录 回顾: 一.定义概念: 二.表达式的分类 举例说明: (一)首先是加.减.乘.除.取余四种表达式: (二)一元表达式 (三)强制转换表达式 (四)判断表达式 (五)逻辑表达式 (六)移位表达式 ...

最新文章

  1. python开发工程师面试题-超实用面试必看,Python工程师面试题
  2. CSDN添加自定义栏目
  3. Numpy 生成随机数和乱序
  4. 深入了解DSP与ARM的区别与联系
  5. settimeout( )是全局函数吗_JS函数的执行
  6. python个人网站系统_利用基于Python的Pelican打造一个自己的个人纯静态网站
  7. 信息学奥赛一本通 1397:简单算术表达式求值 | OpenJudge NOI 1.12 01:简单算术表达式求值
  8. 亚马逊技能开发入门_Amazon QuickSight入门
  9. 计算机专业大学计划,计算机专业大学生职业生涯规划
  10. 图片相似度识别在线_玩转腾讯词向量:词语相似度计算和在线查询
  11. 下列哪项不属于以太网交换机的特点_钢筋混凝土结构的特点及配筋要求考点,每天几分钟,轻松学二建...
  12. JavaScript高级程序设计(第3版)中文在线阅读,也可以免费下载~
  13. js获取IP地址的4种方法
  14. Ubuntu下WIFI不稳定问题
  15. 风变python培训班学费一般多少
  16. cmd怎么进入linux系统时间,在LINUX的命令提示符及CMD命令提示符中显示时间
  17. 左除与右除的区别--MATLAB
  18. vs调试详解(一)(小白教程)
  19. Object-Oriented Design Heuristics (zz)
  20. MATLAB输入、导入方式(手动输入,TXT文件,Excel导入)

热门文章

  1. UE4资源热更打包工具HotPatcher
  2. 开机出现Oxc000000e故障的解决方法
  3. 纯CSS实现枫叶下落
  4. 默认的 Windows 2000 服务
  5. MATLAB【函数和图像】
  6. Matlab遗传算法神经网络泰坦尼克号
  7. EPLAN 设备接线图模板制作
  8. 项目03--当当网源码解读
  9. 叮,一份详细的LIN收发器选型指南请查收
  10. 苏宁精准营销之生成人群包的演进