C程序范例(2)——学生管理系统”链表“实现
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)——学生管理系统”链表“实现的更多相关文章
- Java 9天入门(黑马程序员) 课程收尾 ------学生管理系统 (9.13)
1 实现功能 2 结构概述 分为两个包,各自一个类 Student.java 为学生类,目的是储存学生信息 StudentManager.java 是主程序的代码 3 Student.java 的代码 ...
- 学生管理系统-火车订票系统 c语言课程设计
概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...
- Android For JNI(四)——C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统
Android For JNI(四)--C的数组,指针长度,堆内存和栈内存,malloc,学生管理系统 好几天每写JNI了,现在任务也越来越重了,工作的强度有点高,还有好几个系列的博客要等着更新,几本 ...
- 使用C++实现学生管理系统
我在前面的博客中分别使用C语言的动态数组和链表实现了学生成绩管理系统.近期正好在学习C++,于是我便使用C++实现了学生成绩管理系统.算法和前面的C语言的动态数组实现的学生成绩管理系统几乎相同,仅仅是 ...
- c语言之学生管理系统
0x00 学生管理系统 说到学生管理系统,对于每一个初学c语言的人都是一道不得不过的砍.不过,学习c,我觉得每个人都应该写一个学生管理系统,至于为什么,我想倘若连一个学生管理系统都写不好,哪么他的c是 ...
- Java实现功能简单的学生管理系统(附带源代码)
这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...
- 【IOS开发笔记02】学生管理系统
端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...
- JDBC-简单的学生管理系统-增删改查
结构:三层架构--mvc 三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑. 比如将数据库操作代码封装到一层中,提供一些方法根据参数直 ...
- Java写一个简单学生管理系统
其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...
随机推荐
- JS实战 · 零碎笔记
onclick:单击时触发事件 onmouseover:鼠标进入时触发事件 onmouseout:鼠标离开时触发事件 事件三要素:最基础的内容 事件源:有监听的HTML 标签,能响应事件的HTML ...
- Linux study
在centos5.5中编译LNMP环境 一.配置好ip, dns, 网关, 确保使用远程连接工具能够连接服务器 centos设置ip地址,网关, dns教程: http://www.osyumwei. ...
- [oracle]逗号(或分号等)间隔的列,按这一列劈分后转多行
今天遇到个需求,要匹配两个表, 但是关联的字段,在另一个表中是放在一个字段中用分号分割的 怎么全部匹配呢? 后来在网上搜到了, 记录下 SELECT cp.ES_EXTNUMBER, cp.ES_AG ...
- [译]AngularJS sercies - 获取后端数据
原文:ANGULARJS SERVICES – FETCHING SERVER DATA $http是AngularJS内置的服务,能帮助我们完成从服务端获数据.简单的用法就是在你需要数据的时候,发起 ...
- Distribution2:Distribution Writer
Distribution Writer 调用Statement Delivery 存储过程,将Publication的改变同步到Subscriber中.查看Publication Properties ...
- Sql Server系列:自定义函数
用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...
- WPF Excel导出加个手动修改地址
http://blog.csdn.net/sanjiawan/article/details/6818921 以上是CSDN上的WPF Excel导入导出,我看到有人提问怎么能够手动选择地址,正好用到 ...
- node-mysql 在4.2.0的时候遇到的错误
实际上这个问题折腾了几天.前一阵因为升级到了最新的4.2.0,发现mysql的应用就出错了,错误消息也比较奇怪 Handshake Inactivity Timeout - PROTOCOL_SEQU ...
- C++基础知识
基础知识 &&和||具有"短路"特性,特别是在第二个操作数有++或--时要注意. 显式类型转换 (类型说明符)表达式 //C风格的 类型说明符(表达式) //cpp ...
- 附录B 安装MySql数据库
B.1 卸载旧的MaySql程序 第一步 查找以前是否安装有mysql 使用命令查看是否已经安装过mysql: #rpm -qa | grep -i mysql 如果没有结果,则可以进行mysq ...