利用链表实现简单的学生信息管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct student
{
int id;
char name[20];
int age;
char sex;
char birthday[20];
char address[20];
char phone[15];
char email[30];
struct student *next;
}student;

student *head = NULL;
int length;
void create()
{
student *p1,*p2;
length = 0;
p1 = (student *)malloc(sizeof(student));
p1->id = -1;
if(head == NULL)
{
head = p1;
}
printf("请输入学生的学号、姓名、年龄、性别、出生年月、地址、电话、电子邮箱:\n");
while(1)
{
p2 = (student *)malloc(sizeof(student));
scanf("%d %s %d %c %s %s %s %s",&p2->id,p2->name,&p2->age,&p2->sex,&p2->birthday,&p2->address,p2->phone,p2->email);
if(p2->id == 0)
{
printf("链表创建完成!\n");
break;
}
length ++;
p1->next = p2;
p2->next = NULL;
p1 = p1->next;
}
return ;
}

void LoadStudentInFromFile()
{
student *p,*q;
int c;
FILE* f;
f = fopen("input.txt","rb");
if(f == NULL)
{
return ;
}
fseek(f,0,SEEK_SET);
p = (student *)malloc(sizeof(student));
p->next = NULL;
head = p;
while(!feof(f))
{
c = fgetc(f);
if(c != -1)
{
fseek(f,-1,SEEK_CUR);
}
else
{
return ;
}
q = (student *)malloc(sizeof(student));
fscanf(f,"%d",&q->id);
fscanf(f,"%s",q->name);
fscanf(f,"%d",&q->age);
fscanf(f,"%c",&q->sex);
fscanf(f,"%s",q->birthday);
fscanf(f,"%s",q->address);
fscanf(f,"%s",q->phone);
fscanf(f,"%s",q->email);
q->next = NULL;
p->next = q;
p = p->next;
length ++;//链表长度
}
}

void ModifyStudentInfo()
{
student *p = head->next;
int num;
printf("请输入要修改的学生的学号:");
scanf("%d",&num);
while(p != NULL)
{
if(p->id == num)
{
printf("修改前,学号为%d的学生信息如下:\n",num);
printf("%d %s %d %c %s %s %s %s",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
printf("请输入学生的新电话:");
getchar();
gets(p->phone);
printf("请输入学生的新地址:");
gets(p->address);
printf("修改后,学号为%d的学生信息如下:\n",num);
printf("%d %s %d %c %s %s %s %s",&p->id,p->name,&p->age,p->sex,p->birthday,p->address,p->phone,p->email);
return ;
}
p = p->next;
}
if(p == NULL)
{
printf("该学号不存在!\n");
return ;
}
}
void display()
{
student *p = head->next;
printf("链表中所有的学生信息如下:\n");
while(p != NULL)
{
printf("%d %s %d %c %s %s %s %s",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
printf("\n");
p = p->next;
}
return ;
}

void search()
{
int num,x;
char name[20];
student *p = head->next;
printf("请选择查询方式:\n");
printf("1、按学号查询\t2、按姓名查询\n");
scanf("%d",&x);
if(x == 1)
{
printf("需要查找的学生学号为:");
scanf("%d",num);
while(p != NULL)
{
if(p->id == num)
{
printf("学号为%d的学生信息如下:\n",num);
printf("%d %s %d %c %s %s %s %s",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
return ;
}
p = p->next;
}
if(p == NULL)
{
printf("无此记录!\n");
}
}
else if(x == 2)
{
printf("需要查找的学生姓名为:");
getchar();
gets(name);
p = head->next;
while(p != NULL)
{
if(strcmp(p->name,name) == 0)
{
printf("学生姓名为%s的学生信息如下:\n",name);
printf("%d %s %d %c %s %s %s %s",p->id,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->email);
return ;
}
p = p->next;
}
if(p == NULL)
{
printf("无此记录!\n");
}
}
return ;
}

void insert()
{
int num,i;
student *p,*q;
p = head;

printf("请输入你要插入的位置:");
scanf("%d",&num);
if(num > length)
{
printf("找不到插入的位置\n");
return ;
}
else
{
printf("请输入你要插入的学生的信息:\n");
q = (student *)malloc(sizeof(student));
scanf("%d %s %d %c %s %s %s %s",&q->id,q->name,&q->age,&q->sex,q->birthday,q->address,q->phone,q->email);
while(p != NULL)
{
if(p->id == q->id)
{
printf("该学号已经存在,无法插入!\n");
return ;
}
p = p->next;
}
p = head;
for(i=0; i<num; ++i)
{
p = p->next;
}
q->next = p->next;
p->next = q;
length ++;
printf("插入成功!\n");
return ;
}
}

void Delete()
{
int num;
student *p,*q;
q = head;
p = head->next;
printf("请输入要删除的学生的学号:\n");
scanf("%d",&num);

while(p != NULL)
{
if(p->id == num)
{
q->next = p->next;
free(p);
length --;
printf("删除成功!\n");
return ;
}
p = p->next;
q = q->next;
}
if(p == NULL)
{
printf("找不到要删除的编号!\n");
return ;
}
}

void menu()
{
printf("___________________________________________________\n");
printf("| 学生信息管理系统 |\n");
printf("| 0、退出系统 |\n");
printf("| 1、录入学生信息 |\n");
printf("| 2、建立链表 |\n");
printf("| 3、显示链表 |\n");
printf("| 4、查找链表中的某个元素 |\n");
printf("| 5、删除链表中指定学号的结点 |\n");
printf("| 6、指定位置上插入一个新结点 |\n");
printf("| 7、修改学生信息 |\n");
printf("__________________________________________________\n");
return ;
}

int main(void)
{
int a;
menu();
while(1)
{
printf("请输入相应的功能:");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1:
LoadStudentInFromFile();
menu();
break;
case 2:
create();
menu();
break;
case 3:
if(head)
{
display();
menu();
}
else
{
printf("链表为空,请先建立链表!\n");
menu();
}
break;
case 4:
if(head)
{
search();
menu();
}
else
{
printf("链表为空,请先建立链表!\n");
menu();
}
break;
case 5:
if(head)
{
Delete();
menu();
}
else
{
printf("链表为空,请先建立链表!\n");
menu();
}
break;
case 6:
if(head)
{
insert();
menu();
}
else
{
printf("链表为空,请先建立链表!\n");
menu();
}
break;
case 7:
if(head)
{
ModifyStudentInfo();
menu();
}
else
{
printf("链表为空,请先建立链表!\n");
menu();
}
break;
default:
break;
}
}
system("pause");
return 0;
}

时间: 2024-08-11 23:07:59

利用链表实现简单的学生信息管理系统的相关文章

linux下c/c++实例之十五简单的学生信息管理系统

一.简介 大学期间用vc++开发的简单的学生信息管理系统,主要有添加学生信息.删除学生信息.修改学生信息.查询学生信息.显示学生信息.综合统计(各课程平均成绩和合格率).总分排序和退出系统.设计: 二.详解 1.代码 (1)main.cpp #include<iostream> #include<fstream> #include<iomanip> //使用setw()函数 #include<windows.h> //使用system()函数 #includ

使用python实现一个简单的学生信息管理系统

最近公司搬办公室,杂七杂八的事情比较多,又碰上业务要上线了...很多事情堆到一起来做,导致最近没什么时间学习,写博客.前两天胜利日放假,把以前用java写的学生信息管理系统用python重新写了一遍,以便于帮助python的学习. 好了,废话不多说,首先进行需求分析,下面是我根据需求画的系统结构图: 纯手工制图.....画的不好敬请谅解.从上图来看,整个系统分为main,add,delete,change,select,sort,io,print共八个模块,实现了对学生信息的增删改查排的功能,将

用Java实现一个简单的学生信息管理系统

public class Student { private String no; //学号(长度为6位) private String name; //姓名 private String idCard; //证件号(18位) private int sex; //性别(男(1)/女(0)) private int age; //年龄(1-100) public Student(){} public Student(String no, String name, String idCard, i

程序阅读:简单C++学生信息管理系统

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读并执行以下的程序,找出当中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置.细致体会其使用方法,在以后的设计中可以灵活应用有关方法和技巧 #include <iostream> #include <string.h> using namespace std; #define MAX 100 clas

学生信息管理系统中遇到的问题解析

项目概述:做一个简单的学生信息管理系统 要求:学生信息的增删查改,成绩的增删.自动生成的编号. 工具:微软企业库与MiniUI 遇到的问题与解决方法:(前面的博文也有类似的问题和解决方法,这里不再写冗余的文字了) 1 整体思路(数据的传输思路) 我从后台说起: 数据库获取数据(DataTable) --> (ArrayList)--->Hashtable--->[业务处理]--(JSON类)解析成json-->(mini.decode)-->js对象---(页面展示) 2 唯

学生信息管理系统(第一次.....)

因为我曾经做题都不看书.结果c语言书上的最后面文件的输入输出没有看.昨天学长让我们写个管理系统.我懵了. . 就花了一个小时看了看文件的输入输出.就先写个简单的学生信息管理系统把. 假设遗漏希望各位留言指出. . 我会改进的. 因为第一次写,代码粗糙请见谅.. . 对了,我还发现一个问题,希望会的博友能回复下. 我想怎样才干把写入文件的数据在文本中换行. 我在文件后加上fputc('\n'),是实现换行了,但是在查找的时候查找不到. 希望有人可以解答. . 谢谢.! #include <stdi

微型学生信息管理系统的建立

设计需求:制作一个简单的学生信息管理系统,通过键盘选择操作进行添加学生(学号,姓名,性别,年龄,成绩)的信息,这些信息通过数组存储,同时还可以进行查询某个或全体学生信息,修改学生信息,删除学生信息的操作.(要求有一定的优化,例如对用户输入信息是否符合要求的处理). 面对这个问题,第一想到的是该对象是Student,故创建一个Student类 package com.shxt.java.text1; //新建一个Student类public class Student { //定义学生的属性,姓名

第九周 程序阅读-学生信息管理系统

阅读程序"简单C++学生信息管理系统",找出其中出现构造函数.友元函数.运算符重载.静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧. #include <iostream> #include <cstring> using namespace std; #define MAX 100 class CDate // 定义日期类 { private: unsigned short int year; // 年 unsigned

Python学生信息管理系统的开发

# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在全局变量中:并提供给用户查看当前有多少个学生的功能:# 第三题:向用户提供根据学号查看指定学员具体信息,指定学号删除学员功能 # 用来保存学生的所有信息stuInfos = []# 全局变量sno = ""sName = ""sAge = "" #