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. J2EE项目修改编码问题

    一:项目编码修改 新建项目后,右键项目-->Properties-->Resource,这时可以修改编码为UTF-8. 二:JSP页面编码修改 Window --> Preferen ...

  2. HTML5_01之表单新特性

    1.WebStorm快捷键: Ctrl+Alt+(向下方向键):快速复制当前行 Alt+(向上/下方向键):移动当前行 Ctrl+D:删除当前行 Ctrl+/:快速(取消)注释当前行 Ctrl+Alt ...

  3. 没有水果机的也来体验下Visual Studio for Mac

    在去年微软已经宣布.NET将实现真正的跨平台,并且发布了Mac和Linux版的Visual Studio Code编辑器,但强大的Visual Studio确只有Windows版. 还坚守.NET开发 ...

  4. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  5. Myeclipse 安装SVN步骤

    非在线安装 首先来这儿下载插件 http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 找个最新的下载 解压到对应 ...

  6. 前端学PHP之变量范围

    × 目录 [1]范围跨度 [2]函数范围 [3]global[4]预定义变量[5]超全局变量 前面的话 变量范围即它定义的上下文背景(也就是它的生效范围).在javascript中,并没有变量范围这一 ...

  7. 深入理解CSS Media媒体查询

    × 目录 [1]媒介类型 [2]媒体属性 [3]语法[4]方法 前面的话 一说到响应式设计,肯定离不开媒体查询media.一般认为媒体查询是CSS3的新增内容,实际上CSS2已经存在了,CSS3新增了 ...

  8. Git-Notes

    1.Git安装,直接在官网下载安装即可. 2.Git配置,使用config选项,配置名字和邮箱,如下所示 C:\Users\1yyg>git config --global user.name ...

  9. EntityFramework DbContext 线程安全

    先看这一段异常信息: A second operation started on this context before a previous asynchronous operation compl ...

  10. EntityFramework 7 Linq Contains In 奇怪问题(已修复)

    问题说明: 博客问题纪录 Use EF7, Linq Contains In is error. EF7 Code Commit adding (client side) support for Co ...