想练习一下链表,所以就有了这个用C写的学生管理系统

没有把它写入文件,才不是因为我懒哈哈哈,主要是为了练习链表的

 #include<stdio.h>
#include<stdlib.h>
#include<string.h> typedef struct student
{ // 定义学生的基本数据
char stuName[]; // 姓名
long stuID; // 学号
char gender[]; // 性别
int score[]; // 三门课的成绩
struct student* next;
}stu, *LNode; typedef struct headNode
{ // 定义链表的头结点类型
int length; // 储存学生数量
struct student* next;
}HNode; HNode* InitList();
void printMenu();
void alternation(HNode* head);
int isExist(HNode* head, long existID);
void addStu(HNode* head);
void deleteStu(HNode* head);
void searchStu(HNode* head);
void modifyStu(HNode* head);
void displayStu(HNode* head); int main()
{
HNode* head = InitList();
printf("************* 欢迎进入学生管理系统 *************\n");
while ()
{
printMenu();
alternation(head);
}
return ;
} void printMenu()
{ // 菜单
printf("\n - - - - - - - - -\n");
printf("| 1.添加学生信息 |\n");
printf("| 2.删除学生信息 |\n");
printf("| 3.修改学生信息 |\n");
printf("| 4.查找学生信息 |\n");
printf("| 5.显示全部信息 |\n");
printf("| 6.退出系统 |\n");
printf(" - - - - - - - - \n");
} void alternation(HNode *head)
{ // 选择要执行的操作
int option;
printf("请选择操作:");
scanf("%d", &option);
switch (option)
{
case : addStu(head); break; //添加
case : deleteStu(head); break; //删除
case : modifyStu(head); break; //修改
case : searchStu(head); break; //查询
case : displayStu(head); break; //显示全部学生信息
case : printf("退出系统,再见。"); exit();
default: printf("输入错误,请重新输入:");
}
} HNode* InitList()
{ // 初始化链表
HNode* head = NULL;
head = (HNode*)malloc(sizeof(HNode));
head->length = ;
head->next = NULL;
return head;
} void addStu(HNode* head) // 添加学生信息
{ // 前插法添加学生信息
LNode p = NULL;
p = (stu*)malloc(sizeof(stu));
p->next = NULL;
//- - - - - - - - 开始录入信息 - - - - - - - -//
printf("请输入学号(输入-1录入结束):");
scanf("%d", &p->stuID);
if (p->stuID == -)
return;
if (isExist(head, p->stuID))
{ // 在添加之前判断是否已存在该学生
printf("已存在该学生信息,无需输入!");
return;
}
//getchar();
printf("请输入姓名:");
scanf("%s", &p->stuName);
printf("请输入性别:");
scanf("%s", &p->gender);
printf("请输入成绩(英语、语文、数学):");
for (int i = ; i < ; i++)
{
scanf("%d", &p->score[i]);
}
//- - - - - - - - 录入信息结束 - - - - - - - -//
head->length ++;
p->next = head->next; // 更新学生人数
head->next = p;
printf("添加成功!");
} void deleteStu(HNode* head)
{ // 删除某个学生的信息
stu* temp = NULL;
stu* p = head->next;
long deleteID;
printf("请输入要删除学生的学号:");
scanf("%d", &deleteID);
if (!isExist(head, deleteID))
{ // 在删除之前判断是否已存在该学生
printf("不存在该学生,删除失败!");
return;
}
while (p != NULL)
{
if (p->next->stuID == deleteID)
{
temp = p->next;
p->next = p->next->next;
free(temp);
}
p = p->next;
}
printf("删除成功!");
} int isExist(HNode* head,long existID)
{ // 判断学生是否存在
stu* p = head->next;
while (p != NULL)
{
if (p->stuID == existID)
return ;
p = p->next;
}
return ;
} void searchStu(HNode* head)
{ // 查找某个学生的信息
long searchID;
stu* p = head->next;
printf("请输入要查询的学号:");
scanf("%d", &searchID);
if (!isExist(head, searchID))
{ // 在查询之前判断是否不存在该学生
printf("不存在该学生,查询失败!");
return;
}
while (p != NULL)
{
if (p->stuID == searchID)
{
printf("该学生的信息如下:\n");
printf("姓名:%s\n学号:%d\n性别:%s\n英语成绩:%d\n语文成绩:%d\n数学成绩:%d\n",
p->stuName, p->stuID, p->gender, p->score[], p->score[], p->score[]);
return;
}
p = p->next;
}
} void modifyStu(HNode* head)
{ // 修改某个学生的信息,支持单项信息修改
stu* p = NULL;
p = head->next;
long modifyID;
printf("输入要修改信息的学生的学号:");
scanf("%d", &modifyID);
if (!isExist(head, modifyID))
{ // 在修改之前判断是否已存在该学生
printf("不存在该学生,修改失败!");
return;
}
while (p != NULL)
{
if (p->stuID == modifyID)
{
int option;
long newID;
char newName[];
char newGender[];
int newScore;
printf("请输入要修改的项目(1.学号 2.姓名 3.性别 4.英语成绩 5.语文成绩 6.数学成绩):");
scanf("%d", &option);
switch (option)
{
case : printf("请输入新的学号:"); scanf("%d", &newID); p->stuID = newID; break;
case : printf("请输入新的姓名:"); scanf("%s", newName); strcpy(p->stuName,newName); break;
case : printf("请输入新的性别:"); scanf("%s", newGender); strcpy(p->gender,newGender); break;
case : printf("请输入新的英语成绩:"); scanf("%d", &newScore); p->score[] = newScore; break;
case : printf("请输入新的语文成绩:"); scanf("%d", &newScore); p->score[] = newScore; break;
case : printf("请输入新的数学成绩:"); scanf("%d", &newScore); p->score[] = newScore; break;
}
}
p = p->next;
}
printf("修改成功!");
} void displayStu(HNode* head)
{
stu* p = NULL;
p = head->next;
printf("当前一共有%d个学生的信息,信息如下:\n",head->length);
while (p != NULL)
{
printf("学号:%d 姓名:%s 性别:%s 英语成绩:%d 语文成绩:%d 数学成绩:%d\n",
p->stuID, p->stuName, p->gender, p->score[], p->score[], p->score[]);
p = p->next;
}
}

C语言学生管理系统的更多相关文章

  1. C语言学生管理系统(增进版)

    在原版上进行改进,主要改进的功能有. 1.利用atof:将字符串转换为浮点型: 利用atoi:将字符串转换为整型: 原文地址:http://www.cnblogs.com/sddai/p/577412 ...

  2. C语言学生管理系统(原版本)(自编)

    /*系统特色:(大牛勿笑) *颜色提示 *文字提示 *功能 */ #include <stdio.h> #include <stdlib.h> #include <mat ...

  3. C语言学生管理系统源码分享

    大家好 我就是如假包换的...陈玲 自从运营了C语言程序设计微信公众号 很多粉丝都给我备注 ...奇葩 实在是不敢当 也被人开始叫玲玲姐 我知道 很多人都想看我出境 我本人也有 年多的舞台演讲训练 实 ...

  4. C语言学生管理系统完善版

    #include<stdio.h>#include<string.h>#include <stdlib.h>#define M 100struct score    ...

  5. C语言学生管理系统(C语言课程设计/精简版)

    #include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>typed ...

  6. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  7. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  8. c语言之学生管理系统

    0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...

  9. 学生管理系统(C语言简单实现)

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...

随机推荐

  1. ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 31, event_type: 35报错处理

    centos7系统MySQL5.7在用mysqlbinlog命令查询binlog日志时刚开始查询即自动终止查询,查了一下该日志有300M,于是仔细看发现有报错,见下图: 在网上查找经验贴http:// ...

  2. 两种HTTP请求方法:GET和POST的区别

    之前在一些开发者平台使用网页调用API时,一再提到两种请求方法GET和POST,所以就去了解了下.那么这又不得不提到HTTP了! 一.什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户 ...

  3. HF Java Chap 1

    介绍了java的工作方式以及几个有趣的小程序 Java的工作模式 大体来说有四个步骤: 源代码 编译器 编译器的输出 Java虚拟机 源代码 这是我们程序员接触到的部分.根据我们面临的问题,编写一个符 ...

  4. 【Hardware】i386、x86和x64的故事

    (1)x86的由来 x86架构首度出现在1978年推出的Intel 8086中央处理器,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的.在8086之后,Int ...

  5. 【转载】Java for循环

    转载只为个人学习,阅读请前往原地址:Java for循环的几种用法详解 本文主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环. ...

  6. 1,Hadoop知识储备

    Hadoop初学思维导图 1,Hadoop ··· Hadoop:     Hadoop的核心由HDFS和MapReduce组成.HDFS是分布式文件系统,是Hadoop生态圈的分布式数据存储基石:M ...

  7. C++走向远洋——67(项目二、洗牌)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  8. hue初识

    Hue Web应用的架构 Hue 是一个Web应用,用来简化用户和Hadoop集群的交互.Hue技术架构,如下图所示,从总体上来讲,Hue应用采用的是B/S架构,该web应用的后台采用python编程 ...

  9. python学习记录_中断正在执行的代码,执行剪切板中的代码,键盘快捷键,魔术命令,输入和输出变量,记录输入和输出变量_

    2018-03-28 00:56:39 中断正在执行的代码 无论是%run执行的脚本还是长时间运行的命令ctrl + cIn [1]: KeyboardInterrupt 执行剪切板中的代码 ctrl ...

  10. Go语言中的数据类型转换

    在go语言中,不同类型的变量之间赋值需要显示转换. 语法:T t=T(e) //将i转换为float类型 var j float32=float32(i) 基本数据类型转string 方法1:fmt. ...