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. [ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action

    概括的讲,View中的内容可以分为静态和动态两部分.静态内容一般是html元素,而动态内容指的是在应用程序运行的时候动态创建的内容.给View添加动态内容的方式可归纳为下面几种: Inline cod ...

  2. [ASP.NET MVC 小牛之路]13 - Helper Method

    我们平时编程写一些辅助类的时候习惯用“XxxHelper”来命名.同样,在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (7) -----第二章 实体数据建模基础之拆分实体到多表以及拆分表到多实体

    2-6 拆分实体到多表 问题 你有两张或是更多的表,他们共享一样的主键,你想将他们映射到一个单独的实体. 解决方案 让我们用图2-15所示的两张表来演示这种情况. 图 2-15,两张表,Prodeuc ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章  继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章 ...

  5. LeetCode Note 1st,practice makes perfect

    1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a ...

  6. js中的DOM事件与对象

    概念图 document.getElementById("bb"); 根据id找到bb,只能找一个哦 var aa = document.getElementById(" ...

  7. angularjs自动化测试系列之jasmine

    angularjs自动化测试系列之jasmine jasmine参考 html <!DOCTYPE html> <html lang="en"> <h ...

  8. iOS中多线程知识总结(一)

    这一段开发中一直在处理iOS多线程的问题,但是感觉知识太散了,所以就把iOS中多线程的知识点总结了一下. 1.基本概念 1)什么是进程?进程的特性是什么? 进程是指在系统中正在运行的一个应用程序.   ...

  9. 神奇的CSS sprites,制作特效的新方法

    本文主要内容简译自Dava Shea的英文文章 CSS Sprites: Image Slicing’s Kiss of Death,如果觉得博主讲的含糊不清的话,可以看作者原文. 熟悉了常规切图的我 ...

  10. 快速搭建php环境

    WAMP:在windows系统下搭建PHP开发环境 APPSERVER: 两种可用于开发环境的,一般用WAMP LAMP构架 Linux系统 Apache服务器管理软件 Mysql数据库 php语言 ...