1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现。虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序。所以大家不必要担心。在这里与大家分享我的学生管理系统的链表的实现过程。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
char bianhao[];
char name[];
struct student *next;
};
struct student *creat()//创建链表
{
struct student *head,*p,*end;
head=p=end=(struct student*)malloc(sizeof(struct student));
printf("请输入学生的编号:\n");
scanf("%s",p->bianhao);
while(strcmp(p->bianhao,"")!=)
{
end=p;
printf("请输入学生的姓名\n");
scanf("%s",p->name);
p=(struct student *)malloc(sizeof(struct student));
end->next=p;
printf("请输入学生的编号\n");
scanf("%s",p->bianhao);
}
end->next=NULL;
}
void save(struct student *head)//将链表保存为文件形式
{
FILE *fp;
struct student *p;
char filename[];
int ch;
printf("请输入要保存的文件名\n");
scanf("%s",filename);
if(fp=fopen(filename,"r")!=NULL)
{
printf("该文件已经存在,是否覆盖?\n");
printf("1-覆盖,2-不覆盖\n");
scanf("%d",&ch);
if(ch!=)
{
printf("请重新输入要保存的文件名\n");
scanf("%s",filename);
}
}
if(fp=fopen(filename,"w")==NULL)
{
printf("创建文件失败\n");
}
p=head;
while(p!=NULL)
{
fprintf(fp,"%s\n",p->bianhao);
fprintf(fp,"%s\n",p->name);
p=p->next;
}
fputs("over",fp);
printf("文件保存成功\n");
fclose(fp);
}
void output(struct student *head)//输出链表
{
struct student *p;
p=head;
if(p==NULL)
{
printf("没有创建任何记录\n");
}
while(p!=NULL)
{
printf("%s",p->bianhao);
printf("%s",p->name);
p=p->next;
}
}
struct student *openfile()//打开文件,即新创建连表读取链表文件
{
struct student *head,*p,*f;
FILE *fp;
char filename[];
int ch;
printf("请输入想要打开的文件名\n");
scanf("%s",filename);
if(fp=fopen(filename,"r")==NULL)
{
printf("打开文件失败\n");
printf("1-请重新输入文件名\n2-退出");
scanf("%d",&ch);
if(ch==)
scanf("%s",filename);
else if(ch==)
return NULL;
}
head=p=f=(struct student *)malloc(sizeof(struct student));
fscanf(fp,"%s%s",p->bianhao,p->name);
while(!feof(fp))
{
p=(struct student *)malloc(sizeof(struct student));
f->next=p;//用以节点的链接,是f节点的下一个是p节点,从而就将p,与f联系起来了
fscanf(fp,"%s%s",p->bianhao,p->name);
if(strcmp(p->bianhao,"over")==)
{
f->next=NULL;
printf("文件打开成功\n");
}
f=p;
}
}
void sort_hao(struct student *head)//按照标号排序
{
struct student *p,*f,*t;
char ch[];
int i;
p=f=t=head;
if(head==NULL)
{
printf("没有打开任何文件\n");
}
for(p=head;p->next!=NULL;p=p->next)
{
for(t=head;f=t->next;t=t->next,f=f->next)
{
if(strcmp(t->bianhao,f->bianhao)>)
{
strcpy(ch,t->bianhao);
strcpy(t->bianhao,f->bianhao);
strcpy(f->bianhao,ch); strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);
}
}
}
printf("排序完成\n");
}
void sort_name(struct student *head)//按照姓名排序
{
struct student *p,*f,*t;
char ch[];
int i;
p=f=head=t;
if(head=NULL)
{
printf("文件未能打开\n");
}
for(p=head;p->next!=NULL;p=p->next)
{
for(t=head;f=t->next!=NULL;t=t->next,f=f->next)
{
if(strcmp(t->name,f->name)>)
{
strcpy(ch,t->bianhao);
strcpy(t->bianhao,f->bianhao);
strcpy(f->bianhao,ch); strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);
}
}
}
printf("完成排序\n");
}
void search(struct student *head)//查询
{
struct student *p;
char str[];
int i,j=;
p=head;
if(head==NULL)
{
printf("没有打开任何文件\n");
}
printf("1-按照编号查询\n2-按照姓名查询\n");
scanf("%d",&i);
if(i=)
{
printf("请输入学生的编号\n");
}
else
{
printf("请输入学生的姓名\n");
}
scanf("%s",str);
while(p!=NULL)
{
if(i==)
{
if(strcmp(p->bianhao,str)==)
{
printf("编号:%s\n姓名:%s\n",p->bianhao,p->name);
j=;
break;
}
}
if(i==)
{
if(strcmp(p->name,str)==)
{
printf("编号:%s\n姓名:%s\n",p->name,p->name);
j=;
}
}
p=p->next;
}
if(j==)
{
printf("查找完毕,没有找到任何结果\n");
}
}
struct student *add(struct student *head)//添加学生的信息
{
struct student *p,*e,*f,*h;
if(head==NULL)
{
printf("打开文件失败\n");
}
h=e=f=head;
p=(struct student *)malloc(sizeof(struct student));//新添加节点,即新添加记录
printf("编号:\n");
scanf("%s",p->bianhao);
printf("姓名:\n");
scanf("%s",p->name);
if(strcmp(f->bianhao,p->bianhao)>)
{
p->next=f;
h=p;
printf("添加成功\n");
}
if(f->next=NULL)
{
f->next=p;
p->next=NULL;
printf("添加成功\n");
}
while(f->next!=NULL)
{
if(f->next==NULL)
{
f->next=p;
p->next=NULL;
printf("添加成功\n");
}
}
}
struct student *delete_mem(struct student *head)//删除个人信息
{
struct student *p,*e;
char str[];
if(head==NULL)
{
printf("未能打开任何文件\n");
}
p=e=head;
printf("请输入要删除的编号\n");
scanf("%s",str);
if(strcmp(p->bianhao,str)==)
{
head=head->next;
printf("删除成功\n");
}
p=p->next;
while(p!=NULL)
{
if(strcmp(p->bianhao,str)==)
{
if(p->next!=NULL)
e->next=p->next;
if(p->next==NULL)
e->next=NULL;
printf("删除成功\n");
}
p=p->next;
e=e->next;
}
printf("搜索完毕,未能找到结果\n");
}
struct student *change(struct student *head)//修改学生的信息
{
struct student *p;
char str[];
if(head==NULL)
{
printf("未能打开任何文件\n");
}
p=head;
printf("请输入要修改的学生编号\n");
scanf("%s",p->bianhao);
while(p!=NULL)
{
if(strcmp(p->bianhao,str)==)
{
printf("编号:%s\n姓名:%s\n",p->bianhao,p->name);
printf("请按照提示操作\n");
printf("编号\n");
scanf("%s",p->bianhao);
printf("姓名\n");
scanf("%s",p->name);
}
p=p->next;
}
printf("未能找到记录\n");
}
void mima()//密码的加密
{
FILE *fp;
char mima1[],mima2[];
int i=;
if(fp=fopen("mima","r")==NULL)
{
printf("密码尚未创建\n");
do
{
printf("请输入密码\n");
scanf("%s",mima1);
printf("请在此输入密码\n");
scanf("%s",mima2);
if(strcmp(mima1,mima2)!=)
{
printf("两次输入的密码不同,请重新输入\n");
i=;
}
else
break;
}while(i);
fp=fopen("mima","w");
fprintf(fp,"%s",mima1);
printf("密码试制成功\n");
fclose(fp);
}
else
printf("密码以创建\n");
}
void delete_doc()//文件的删除操作
{
FILE *fp;
char mima1[],mima2[],filename[];
printf("请输入初始密码\n");
scanf("%s",mima1);
fp=fopen("mima1","r");
fscanf(fp,"%s",mima2);
if(strcmp(mima1,mima2)==)
{
printf("请输入要删除的文件名\n");
scanf("%s",filename);
if(remove(filename)==)//remove函数的应用?
{
printf("删除成功\n");
}
else
{
printf("删除失败");
}
}
else
printf("密码错误\n");
}
void output_use()
{
printf("使用方法如下\n");
printf("1-编辑个人信息之后需要保存,否则再次启动时会覆盖\n");
printf("2-保存信息后,若要在原文件中添加,则需要先打开文件功能,然后再添加记录,然后再保存\n");
printf("3-除了新建文件之外,进行其他功能,先打开文件才能继续\n");
printf("4-编辑个人信息时,以学号0作为结束,故学生学号是没有为0的\n");
printf("5-由于本系统的缺陷,故在保存前需要保存一个学生的信息\n");
}
void output_view()//功能表
{
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("8-删除记录\n");
printf("9-修改记录\n");
printf("a-设置密码\n");
printf("b-删除文件\n");
printf("==========================\n");
}
void main()//主函数
{
struct student *head=NULL;
char ch;
int i,j=;
printf("欢迎使用本系统,按回车键进入系统\n");
getchar();
system("cls");
do
{
output_view();
printf("请选择相应的操作\n");
scanf("%c",&ch);
switch(ch)
{
case '':output_use();break;
case '':head=creat();break;
case '':save(head);break;
case '':output(head);break;
case '':head=openfile();break;
case '':system("cls");
printf("1-按照编号排序\n");
printf("2-按照姓名排序\n");
scanf("%d",&i);
switch(i)
{
case :sort_hao(head);break;
case :sort_name(head);break;
}
break;
case '':search(head);break;
case '':head=add(head);break;
case '':head=delete_mem(head);break;
case '':head=change(head);break;
case 'a':mima();break;
case 'b':delete_doc();break;
}
printf("按回车键返回\n");
getchar();
system("cls");
j=;
}while(j);
}

2.希望与大家共同努力,共同上进。

长风破浪会有时,直挂云帆济沧海!

C程序范例(2)——学生管理系统”链表“实现的更多相关文章

  1. Java 9天入门(黑马程序员) 课程收尾 ------学生管理系统 (9.13)

    1 实现功能 2 结构概述 分为两个包,各自一个类 Student.java 为学生类,目的是储存学生信息 StudentManager.java 是主程序的代码 3 Student.java 的代码 ...

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

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

  3. Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统

    Android For JNI(四)--C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统 好几天每写JNI了,现在任务也越来越重了,工作的强度有点高,还有好几个系列的博客要等着更新,几本 ...

  4. 使用C++实现学生管理系统

    我在前面的博客中分别使用C语言的动态数组和链表实现了学生成绩管理系统.近期正好在学习C++,于是我便使用C++实现了学生成绩管理系统.算法和前面的C语言的动态数组实现的学生成绩管理系统几乎相同,仅仅是 ...

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

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

  6. Java实现功能简单的学生管理系统(附带源代码)

    这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...

  7. 【IOS开发笔记02】学生管理系统

    端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...

  8. JDBC-简单的学生管理系统-增删改查

    结构:三层架构--mvc 三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑. 比如将数据库操作代码封装到一层中,提供一些方法根据参数直 ...

  9. Java写一个简单学生管理系统

    其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...

随机推荐

  1. 让easyui datagrid支持bootstrap的tooltip

    让easyui datagrid支持bootstrap的tooltip 发表于 下午 1:53 by ylpro.net & 分类 Java. Easyui在1.3.3版本之前是不支持tool ...

  2. iOS瀑布流实现(Swift)

    这段时间突然想到一个很久之前用到的知识-瀑布流,本来想用一个简单的方法,发现自己走入了歧途,最终只能狠下心来重写UICollectionViewFlowLayout.下面我将用两种方法实现瀑布流,以及 ...

  3. 【Win 10 应用开发】打印UI元素

    Windows App支持将UI界面进行打印的功能,这与浏览器中的打印网页的用途相近,其好处就是“所见即所得”,直接把界面上呈现的内容打印下来,比重新创建打印图像方便得多. 要在通用App中实现打印, ...

  4. mysql数据库学习目录

    前面的话 对于前端工程师来说,数据库并不是主要技能点,但是基本的增删改查操作还是需要了解的.小火柴将mysql数据库的学习记录整理如下 目录  前端学数据库之基础操作 前端学数据库之数据类型 前端学数 ...

  5. DOM-Node类型

    DOM(文档队形模型)是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次化的节点树,允许开发人员添加,移除和修改页面的一部分.DOM可以讲任何HTML和XML文档描绘成一 ...

  6. [备忘] Automatically reset Windows Update components

    这两天遇到Windows 10的更新问题,官方有一个小工具,可以用来修复Windows Update的问题,备忘如下 https://support.microsoft.com/en-us/kb/97 ...

  7. iOS开发之WebView

    做iOS的应用也有一段时间了,在之前的demo中一直没有机会用到WebView,今天就查缺补漏一下,使用一下WebView.最早接触WebView是在Android中接触的,iOS中的WebView的 ...

  8. T-SQL CROSS APPLY、MERGE

    写在前面 刚才看项目里一个存储过程,也是好长时间没有使用Sql Server2008了,好多写法和函数感觉到陌生,这就遇到了CROSS APPLY 和MERGE的语法,两者之前完全没接触过. 所以专门 ...

  9. 【集合框架】JDK1.8源码分析HashSet && LinkedHashSet(八)

    一.前言 分析完了List的两个主要类之后,我们来分析Set接口下的类,HashSet和LinkedHashSet,其实,在分析完HashMap与LinkedHashMap之后,再来分析HashSet ...

  10. 浅谈移动端之touch事件--手指的滑动事件

    今天台风‘海马’袭击深圳,全市停工.现分享一篇关于touch的文章,望指教! 原理: 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touch ...