Reborn Terran Emperor

由于最新pat不支持gets的使用,现在有两个解决思路

1.利用fgets,但fgets会保留换行符,需要对字符串修改,极其麻烦,不推荐

2.引入c++的cin.getline和gets一个作用,本篇是这样的,除了这个点,本文其他都是c语言

项目简介

考试报名工作给各高校报名工作带来了新的挑战,给教务管理部门增加了很大的工作量,报名数据手工录入既费时又会不可避免地出现错误。本项目是对考试报名管理的简单模拟,包括以下功能: 1.报名,输入考生信息:学号,姓名,报名科目; 2.列出全部报名信息:输出学号,姓名,报名科目; 3.查询某个科目的考生信息或者查询某个学号、姓名的报名信息; 4.修改信息:修改报名科目; 5.取消报名:删除某个考生的报名信息; 6.统计每个科目的报名人数

相关知识

本项目的数据是一组考生信息,每条考生信息由学号、姓名、报考科目信息组成,这组考生信息具有相同特性,属于同一数据对象,相邻数据元素之间存在序偶关系。由此可以看出,这些数据具有线性表中数据元素的性质,所以该系统的数据可以采用线性表来存储。 线性表的顺序存储结构的特点是:逻辑关系相邻的两个元素在物理位置上也相邻,因此可以随机存储表中任一元素,它的存储位置可用一个简单、直观的公式来表示。然而,从另一个方面来看,这个特点也铸成了这种存储结构的弱点:在做插入或删除操作时,需要移动大量元素。为克服这一缺点,有另一种存储形式――链式存储。链式存储是线性表的另一种表示方法,由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构的弱点,但同时也失去了顺序表可随机存取的特点。 链式存储的优点是插入或删除元素时很方便,使用灵活。缺点是存储密度小,存储空间利用率低。事实上,链表插入、删除运算的快捷是以空间代价来换取时间。 顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。

编程要求

自定义数据结构(建议查阅vector,并使用vector实现),并完成必要的功能,可以使用C或者C++实现。 还必须自己实现主函数。 主函数接收输入,并调用相关接口或函数实现输出

测试说明

平台会对你编写的代码进行测试:

测试输入:(1 表示报名,5 表示5人 ,下面是5人的学号等信息) 1 5 001 lily math 002 nacy english 003 lulu math 004 kate operating system 005 bili math 2 //表示列出当前报名情况 预期输出: 001 lily math 002 nacy english 003 lulu math 004 kate operating system 005 bili math 3 math //查询math报名信息 预期输出: 001 lily math 003 lulu math 005 bili math 4 003 test//表示修改003 报名科目 为test 预期输出 001 lily math 002 nacy english 003 lulu test 004 kate operating system 005 bili math 5 004 //表示删除004的报名信息 预期输出 001 lily math 002 nacy english 003 lulu test 005 bili math 6 //按报名科目统计输出 预期输出 //按遇到的报名科目先后输出统计结果 math 2 english 1 test 1

#include <stdlib.h>
#include <stdio.h>
#include<string.h>
#include <bits/stdc++.h>//c++的万能头文件,用来引入cin.getline
using namespace std;//同样是c++的固定语句 /*1.报名,输入考生信息:学号,姓名,报名科目;
2.列出全部报名信息:输出学号,姓名,报名科目;
3.查询某个科目的考生信息或者查询某个学号、姓名的报名信息;
4.修改信息:修改报名科目;
5.取消报名:删除某个考生的报名信息;
6.统计每个科目的报名人数 *///定义一个学生信息结构体
struct node
{char num[20];  // 表示学号 char name[20] ; //表示姓名char subj[20] ;//表示科目 int number;//最后一个函数才会使用 struct node *next;  //指向下一个结点的指针
};//输出链表的函数
void printlist(struct node *head)
{struct node *p;p=head->next;while(p!=NULL){printf("%s %s %s",p->num,p->name,p->subj);printf("\n");p=p->next;}
}
//查找
void findlist(struct node *head,char s[])
{struct node *p;p=head->next;while(p!=NULL){if(!strcmp(p->subj,s))//这是一个字符串函数,比较asclla码,如果一样返回0 {printf("%s %s %s",p->num,p->name,p->subj);printf("\n");}p=p->next;}
}
//修改
struct node* changelist(struct node *head,char s[],char str[])
{struct node *p;p=head->next;while(p!=NULL){if(!strcmp(p->num,s))//这是一个字符串函数,比较asclla码,如果一样返回0 {strcpy(p->subj,str);//复制 break;}p=p->next;} return head;} //删除 struct node* deletelist(struct node *head,char s[])
{struct node *p,*q;q=head;p=head->next;while(p!=NULL){if(!strcmp(p->num,s))//这是一个字符串函数,比较asclla码,如果一样返回0 {q->next=p->next;free(p);p=p->next;break;}else{q=p;p=p->next;}} return head;} //最后一个函数 //再建立一个链表,和一个结构体(为了方便我直接利用第一个链表了,在里面加个int number) //将遇到的第一个科目放在二链表的第一个结点,以此类推
void fprint_list(struct node *head)
{struct node *p;p=head->next;struct node* head2=(struct node*)malloc(sizeof(struct node));//头结点head2->next=NULL;struct node* tail2;tail2=head2;struct node *q;struct node* temp;//存放科目while(p!=NULL){//判断当前科目是否已经在二表,在的话就跳过 int sign=0;q=head2->next;while(q!=NULL){if(!strcmp(p->subj,q->subj)){sign=1;//判断是否在的一个标志 break;}q=q->next;}if(sign==1){p=p->next;continue;}struct node* newnode=(struct node*)malloc(sizeof(struct node));strcpy(newnode->subj,p->subj);//复制 ,将科目复制给新节点 newnode->number=1;//数目是1 temp=p;p=p->next;//从下一个结点开始比较 while(p!=NULL){if(!strcmp(p->subj,newnode->subj)) //如果后面结点与现在的结点相同,就数量加1 {newnode->number++;}p=p->next;}//尾插法创建链表newnode->next=tail2->next;tail2->next=newnode;tail2=newnode; p=temp->next;} //开始打印 q=head2->next;while(q!=NULL){printf("%s %d",q->subj,q->number);
//      puts(q->subj);
//      printf("%d",q->number);printf("\n");q=q->next;} }int main()
{
/*测试输入:(1 表示报名,5 表示5人 ,下面是5人的学号等信息)
1 5
001 lily math
002 nacy english
003 lulu math
004 kate operating system
005 bili math*/
int a,n;
scanf("%d %d",&a,&n);
//建立链表并赋值struct node* head=(struct node*)malloc(sizeof(struct node));//头结点head->next=NULL;struct node* tail;tail=head;int i=1;while(i<=n){   //建立新节点 struct node* newnode=(struct node*)malloc(sizeof(struct node));
//  scanf("%s %s %s",&newnode->num,&newnode->name,&newnode->subj);scanf("%s %s ",&newnode->num,&newnode->name);//末尾多一个空格是为了吸收回车,否则回车会在缓冲区内,影响cin.getline的读取,导致多读一个回车
//  gets(newnode->subj);//只能用gets,因为有的有空格 ,但最新的pat已经不支持gets cin.getline(newnode->subj,sizeof(newnode->subj));//尾插法创建链表newnode->next=tail->next;tail->next=newnode;tail=newnode; i++;}//2  //表示列出当前报名情况
//预期输出:
//001 lily math
//002 nacy english
//003 lulu math
//004 kate operating system
//005 bili math
int b;
scanf("%d",&b);
printlist(head);
//3 math //查询math报名信息
//预期输出:
//001 lily math
//003 lulu math
//005 bili math
int c;
char find[20];
scanf("%d ",&c);//末尾多一个空格是为了吸收回车,否则回车会在缓冲区内,影响cin.getline的读取,导致多读一个回车
//gets(find);
cin.getline(find,sizeof(find));
findlist(head,find);//4  003 test//表示修改003 报名科目 为test
//预期输出
//001 lily math
//002 nacy english
//003 lulu test
//004 kate operating system
//005 bili math
int d;
scanf("%d",&d);
char find2[20],change[20];
scanf("%s %s",&find2,&change);
head=changelist(head,find2,change);
printlist(head);
//5 004 //表示删除004的报名信息
//预期输出
//001 lily math
//002 nacy english
//003 lulu test
//005 bili math
int e;
scanf("%d",&e);
char find3[20];
scanf("%s",&find3);
head=deletelist(head,find3);
printlist(head);
//6  //按报名科目统计输出
//预期输出  //按遇到的报名科目先后输出统计结果
//math 2
//english 1
//test 1
int f;
scanf("%d",&f);
fprint_list(head);}

学生信息管理系统(头哥适用版)(c语言)相关推荐

  1. 赶紧进来看看--用C语言实现学生信息管理系统(1.0静态版)

    本文介绍了用C语言实现学生信息管理系统设计,主要包括对学生信息增删查改.分类统计.排序等功能,文章最后有全部源码展示- C语言实现学生信息管理系统--1.0静态版 一.学生信息管理系统介绍 二.实现学 ...

  2. 学生信息管理系统(结构化程序)(C语言)

    学生信息管理系统(结构化程序)(C语言) 一.实验目的 明确结构化程序设计的基本结构. 2.通过对问题的分析,设计合理的结构化程序解决问题 二.实验内容 对学生信息管理系统,要求完成以下基本任务: 1 ...

  3. Py学生信息管理系统 案例(优化版)

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  4. 赶紧进来看看---C语言实现学生信息管理系统(3.0文件存储版)

    本文主要介绍了将学生信息管理系统改造为文件存储版本- 主要涉及文件操作函数–将学生信息导入文件和从文件读取学生信息到程序中,从而达到数据持久化的效果 文章最后有源码展示 学生信息管理系统1.0静态版- ...

  5. asp.net+sqlserver学生信息管理系统-计算机毕业设计源码24077

    摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用C#技术建设学生信息管理 ...

  6. 按姓名删除学生信息C语言无指针,学生信息管理系统修改

    北京工业大学耿丹学院 c语言设计课程报告 课程设计名称:高级语言程序设计 专业班级:计算机科学与技术1 姓名:吴双 学号:150809201 2016年5月10日 一对c语言指针链表的体会 ----- ...

  7. 基于C语言的学生信息管理系统_(更新版)_(附源码和安装包)_课程设计_☆*往事随風*☆的博客

    学生信息管理系统 一.需求 基于C语言编写一个学生信息管理系统来实现对学生成绩的管理(数学.C语言.英语),系统要能够实现基本的增.删.改.查等功能,在此基础上还可以自由发挥,要求使用到数组.文件.排 ...

  8. 学生信息管理系统(C++语言版)

    学生信息管理系统(C语言版) #include "stdio.h" #include "bios.h" #include "conio.h" ...

  9. [置顶]完美简版学生信息管理系统(附有源码)管理系统

    简版学生信息管理系统 目前为止找到的简版系统中最新.最全的java类管理系统 点击进入简版系统 如果无法直接连接,请进入: https://blog.csdn.net/weixin_43419816/ ...

  10. php编写一个学生类_PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

最新文章

  1. (八)ThreadLocal的使用及原理分析
  2. ubuntu安装扩展在phpinfo显示不出来的解决办法
  3. 联想服务器支持esxi版本,联想中国(Lenovo China)_服务频道_服务政策
  4. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
  5. 使用禅道Docker安装包安装
  6. python的lambda函数错误的是_Python 中的 AWS Lambda 函数错误 - AWS Lambda
  7. RVC使用指南(一)-基本配置
  8. ABI (应用程序二进制接口)
  9. 读《Java编程思想第五版》心得体会
  10. java实例是什么_java 什么是实例
  11. 如何对工厂设备进行精准化管理?
  12. 中国科学院计算机研究所上级单位,陈援非(中国科学院计算技术研究所高工)_百度百科...
  13. 怎么将图片压缩到最小,用什么方法
  14. UE4 Matinee功能基本概念及简单示例(Sequence编辑器)
  15. 2010互联网第一件大事件——谷歌退出中国内地
  16. 前端vue+element ie兼容性问题
  17. C陷阱与缺陷-疑难问题理解06
  18. Win10家庭版组策略打不开怎么办
  19. 趣抖音短视频站在行业风口,如何脱颖而出?
  20. 奇门仓储场景具体应用

热门文章

  1. modalpopup控件使用时的pannel设置问题
  2. Java –显示所有ZoneId及其UTC偏移量
  3. LoadLibraryEx(DONT_RESOLVE_DLL_REFERENCES)的缺陷
  4. 二手交易网站 /二手交易平台/二手交易系统
  5. Ambari2.7.4配置HIVE_AUX_JARS_PATH
  6. JEPG图片下载方法
  7. C语言基础-计算一个整数各个位数之和
  8. windows 商店的Ubuntu18.04安装教程
  9. java实现图片的压缩且保留图片尺寸不变
  10. 编程计算并输出1 - n之间的所有数的平方和立方。其中n值由用户从键盘输入