#include <stdio.h>
#include<stdlib.h>
#include<string.h> typedef struct student {
int number;
char name[];
char faculty[];
char classes[];
struct student * link;
}STU; STU * CreateLink();
void WriteLink(STU *); void input();
void del();
void del_number(STU *);
void del_name(STU *);
void del_faculty(STU *);
void del_classes(STU *);
void search();
void search_number(STU *);
void search_name(STU *);
void search_faculty(STU *);
void search_classes(STU *);
void sort();
void show();
void edit(); void main()
{
char c;
FILE * fp; if((fp=fopen("student.dat","r"))==NULL)
{
fp=fopen("student.dat","w");
fclose(fp);
} do
{
system("cls");
printf("\n\n\n");
printf("\t\t╔═════════════════════╗\n");
printf("\t\t║ ║\n");
printf("\t\t║ 1: 添加一个学生 ║\n");
printf("\t\t║ 2: 删除一个学生 ║\n");
printf("\t\t║ 3: 查找一个学生 ║\n");
printf("\t\t║ 4: 学生信息排序 ║\n");
printf("\t\t║ 5: 修改学生信息 ║\n");
printf("\t\t║ 6: 查看学生信息 ║\n");
printf("\t\t║ 9: 退出 ║\n");
printf("\t\t║ ║\n");
printf("\t\t╚═════════════════════╝\n");
printf("\t\t \n");
printf("\t\t请选择输入选项[1\\2\\3\\4\\5\\6\\9]:> ");
do
{
c=getchar();
}while(c!=''&&c!=''&&c!=''&&c!=''&&c!=''&&c!=''&&c!='');
getchar(); switch(c)
{
case '': input(); break;
case '': del(); break;
case '': search(); break;
case '': sort(); break;
case '': edit(); break;
case '': show(); break;
case '': exit();
}
system("cls");
}while();
} STU * CreateLink()
{
FILE *fp;
STU * head,*p1, *p2; if((fp=fopen("student.dat","r"))==NULL)
{
printf("打开文件错误,退出。");
exit();
}
head=p1=p2=(STU *)malloc(sizeof(STU));
while(!feof(fp))
{
if(fscanf(fp,"%d %s %s %s\n",&p2->number,p2->name,p2->faculty,p2->classes)==EOF)
{
free(head);
return NULL;
}
p1->link=p2;
p1=p2;
p2=(STU *)malloc(sizeof(STU));
}
p1->link=NULL;
free(p2);
fclose(fp); return head;
} void WriteLink(STU * p2)
{
FILE *fp; if((fp=fopen("student.dat","w"))==NULL)
{
printf("打开文件错误,退出。");
exit();
}
while(p2!=NULL)
{
fprintf(fp,"%d %s %s %s\n",p2->number,p2->name,p2->faculty,p2->classes);
p2=p2->link;
}
fclose(fp);
} void input()
{
STU * head, *p1, *p2;
system("cls"); head=CreateLink();
p1=head; if(p1!=NULL)
while(p1->link!=NULL)
p1=p1->link; p2=p1;
printf("\n\n\n\t\t输入待添加学生(-1 结束):\n");
while()
{
p2=(STU *)malloc(sizeof(STU));
if(p1==NULL) head=p1=p2;
printf("输入学号:");
scanf("%d",&p2->number);
if(p2->number==-) break;
printf("输入 姓名、系别、班级:");
scanf("%s%s%s",p2->name,p2->faculty,p2->classes);
p1->link=p2;
p1=p2;
}
p1->link=NULL;
free(p2); WriteLink(head); free(head);
} void del()
{
STU * head=CreateLink();
char c;
do
{
system("cls");
printf("\n\n\n");
printf("\t\t╔═════════════════════╗\n");
printf("\t\t║ ║\n");
printf("\t\t║ 请输入删除内容: ║\n");
printf("\t\t║ ║\n");
printf("\t\t║ 1: 按照学号删除 ║\n");
printf("\t\t║ 2: 按照姓名删除 ║\n");
printf("\t\t║ 3: 按照系别删除 ║\n");
printf("\t\t║ 4: 按照班级删除 ║\n");
printf("\t\t║ 9: 返回主菜单 ║\n");
printf("\t\t║ ║\n");
printf("\t\t╚═════════════════════╝\n");
printf("\t\t \n");
printf("\t\t请选择输入选项[0\\1\\2\\3\\4\\9]:> ");
do
{
c=getchar();
}while(c!=''&&c!=''&&c!=''&&c!=''&&c!='');
getchar(); switch(c)
{
case '': del_number(head); break;
case '': del_name( head); break;
case '': del_faculty(head); break;
case '': del_classes(head); break;
case '': return;
}
printf("\t\t按任意键返回主菜单:\n");
getchar();
system("cls");
}while(); free(head);
}
void del_number(STU * head)
{
STU * p1, *p2, temp;
system("cls");
do
{
printf("\n\n\n\t\t输入要删除学生学号(-1 结束):");
scanf("%d",&temp.number);
getchar();
p1=p2=head;
while(p2!=NULL)
{
if(head->number==temp.number)
{
head=head->link;
p1->link=NULL;
free(p1);
p1=p2=head;
}
else
{
if(p2->number==temp.number)
{
p1->link=p2->link;
p2->link=NULL;
free(p2);
p2=p1;
}
p1=p2;
p2=p2->link;
}
}
}while(temp.number!=-);
WriteLink(head);
}
void del_name(STU * head)
{
STU * p1, *p2, temp;
system("cls");
do
{
printf("\n\n\n\t\t输入要删除学生姓名(EOF 结束):");
if(scanf("%s",temp.name)==EOF) break;
getchar();
p1=p2=head;
while(p2!=NULL)
{
if(strcmp(head->name,temp.name)==)
{
head=head->link;
p1->link=NULL;
free(p1);
p1=p2=head;
}
else
{
if(strcmp(head->name,temp.name)==)
{
p1->link=p2->link;
p2->link=NULL;
free(p2);
p2=p1;
}
p1=p2;
p2=p2->link;
}
}
}while();
WriteLink(head);
}
void del_faculty(STU * head)
{
STU * p1, *p2, temp;
system("cls");
do
{
printf("\n\n\n\t\t输入要删除学生系别(EOF 结束):");
if(scanf("%s",temp.faculty)==EOF) break;
getchar();
p1=p2=head;
while(p2!=NULL)
{
if(strcmp(head->faculty,temp.faculty)==)
{
head=head->link;
p1->link=NULL;
free(p1);
p1=p2=head;
}
else
{
if(strcmp(head->faculty,temp.faculty)==)
{
p1->link=p2->link;
p2->link=NULL;
free(p2);
p2=p1;
}
p1=p2;
p2=p2->link;
}
}
}while();
WriteLink(head);
}
void del_classes(STU * head)
{
STU * p1, *p2, temp;
system("cls");
do
{
printf("\n\n\n\t\t输入要删除学生班级(EOF 结束):");
if(scanf("%s",temp.classes)==EOF) break;
getchar();
p1=p2=head;
while(p2!=NULL)
{
if(strcmp(head->classes,temp.classes)==)
{
head=head->link;
p1->link=NULL;
free(p1);
p1=p2=head;
}
else
{
if(strcmp(head->classes,temp.classes)==)
{
p1->link=p2->link;
p2->link=NULL;
free(p2);
p2=p1;
}
p1=p2;
p2=p2->link;
}
}
}while();
WriteLink(head);
} void search()
{
STU * head=CreateLink(); char c;
do
{
system("cls");
printf("\n\n\n");
printf("\t\t╔═════════════════════╗\n");
printf("\t\t║ ║\n");
printf("\t\t║ 请输入查找内容: ║\n");
printf("\t\t║ ║\n");
printf("\t\t║ 1: 按照学号查找 ║\n");
printf("\t\t║ 2: 按照姓名查找 ║\n");
printf("\t\t║ 3: 按照系别查找 ║\n");
printf("\t\t║ 4: 按照班级查找 ║\n");
printf("\t\t║ 9: 返回主菜单 ║\n");
printf("\t\t║ ║\n");
printf("\t\t╚═════════════════════╝\n");
printf("\t\t \n");
printf("\t\t请选择输入选项[0\\1\\2\\3\\4\\9]:> ");
do
{
c=getchar();
}while(c!=''&&c!=''&&c!=''&&c!=''&&c!='');
getchar(); switch(c)
{
case '': search_number(head); break;
case '': search_name( head); break;
case '': search_faculty(head); break;
case '': search_classes(head); break;
case '': return;
}
printf("\t\t按任意键返回主菜单:\n");
getchar();
system("cls");
}while();
}
void search_number(STU * head)
{
STU temp,*p2=head;
system("cls"); do
{
printf("\n\n\n\t\t输入要查找学生学号(-1 结束):\n\t\t");
scanf("%d",&temp.number);
printf("\t\t查询结果:\n");
while(p2!=NULL)
{
if(p2->number==temp.number)
printf("\t\t%d %s %s %s",p2->number,p2->name,p2->faculty,p2->classes);
p2=p2->link;
}
p2=head;
}while(temp.number!=-); }
void search_name(STU * head)
{
STU temp, *p2=head;
system("cls"); printf("\n\n\n\t\t输入要查找学生姓名(EOF 结束):\n\t\t");
do
{
if(scanf("%s",temp.name)==EOF) return;
printf("\t\t查询结果:\n");
while(p2!=NULL)
{
if(strcmp(p2->name,temp.name)==)
printf("\t\t%d %s %s %s\n\t\t",p2->number,p2->name,p2->faculty,p2->classes);
p2=p2->link;
}
p2=head;
getchar();
printf("\n\n\n\t\t输入要查找学生姓名(EOF 结束):\n\t\t");
}while();
}
void search_faculty(STU * head)
{
STU temp, *p2=head;
system("cls"); printf("\n\n\n\t\t输入要查找学生系别(EOF 结束):\n\t\t");
do
{
if(scanf("%s",temp.faculty)==EOF) return;
printf("\t\t查询结果:\n");
while(p2!=NULL)
{
if(strcmp(p2->faculty,temp.faculty)==)
printf("\t\t%d %s %s %s\n\t\t",p2->number,p2->name,p2->faculty,p2->classes);
p2=p2->link;
}
p2=head;
getchar();
printf("\n\n\n\t\t输入要查找学生系别(EOF 结束):\n\t\t");
}while();
}
void search_classes(STU * head)
{
STU temp, *p2=head;
system("cls"); printf("\n\n\n\t\t输入要查找学生班级(EOF 结束):\n\t\t");
do
{
if(scanf("%s",temp.classes)==EOF) return;
printf("\t\t查询结果:\n");
while(p2!=NULL)
{
if(strcmp(p2->classes,temp.classes)==)
printf("\t\t%d %s %s %s\n\t\t",p2->number,p2->name,p2->faculty,p2->classes);
p2=p2->link;
}
p2=head;
getchar();
printf("\n\n\n\t\t输入要查找学生班级(EOF 结束):\n\t\t");
}while();
} void sort()
{
STU * head, *p1, *p2;
STU temp; head=CreateLink(); system("cls");
printf("\n\n\n\t\t按照学号排序(正序):\n"); //常排序
for(p1=head;p1!=NULL;p1=p1->link)
for(p2=p1->link;p2!=NULL;p2=p2->link)
if(p1->number>p2->number)
{
temp.number=p1->number;
strcpy(temp.name,p1->name);
strcpy(temp.faculty,p1->faculty);
strcpy(temp.classes,p1->classes);
p1->number=p2->number;
strcpy(p1->name,p2->name);
strcpy(p1->faculty,p2->faculty);
strcpy(p1->classes,p2->classes);
p2->number=temp.number;
strcpy(p2->name,temp.name);
strcpy(p2->faculty,temp.faculty);
strcpy(p2->classes,temp.classes);
} WriteLink(head); printf("\t\t排序完毕,输出排序结果:");
show();
free(head);
} void show()
{
STU * head, *p2; head=CreateLink(); printf("\n\n\n\t\t学号 姓名 系别 班级:\n");
p2=head;
while(p2!=NULL)
{
printf("\t\t%d %s %s %s\n",p2->number,p2->name,p2->faculty,p2->classes);
p2=p2->link;
}
getchar();
} void edit()
{
STU * head, *p2;
STU temp;
head=CreateLink();
p2=head; system("cls");
do
{
printf("\n\n\n\t\t输入要查找学生学号(-1 结束):\n");
scanf("%d",&temp.number);
getchar();
while(p2!=NULL)
{
if(p2->number==temp.number)
{
printf("请输入修改后的内容:姓名、系别、班级:\n");
scanf("%s %s %s",p2->name,p2->faculty,p2->classes);
}
p2=p2->link;
}
}while(temp.number!=-); WriteLink(head);
free(head);
}

还是把一个课程设计作为第一篇文章吧——学生学籍管理系统(C语言)的更多相关文章

  1. 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:

    小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...

  2. wordpress如何添加自增变量(第一篇文章显示摘要后面的只显示标题)

    有时我们在调用文章列表的时候需要在前面添加序号看起来比较整齐,如何实现呢?要想精确的控制每篇文章,我们先在循环前定义一个变量 $ashu_i=1 来计数,变量名随便,然后每循环一次,$ashu_i加1 ...

  3. 3.新手建站教程系列之认识WordPress和第一篇文章

    上一期咱已经把本地环境和wp网站给搭建出来了,接下来就是来认识这个程序了.进入网站后台,地址为你的网址/wp-admin 后台名字叫做仪表盘,首页是一个信息合集区域,上面会显示有多少文章,多少页面以及 ...

  4. 使用cnblogs发布第一篇文章,HelloWorld

    HelloWorld! 瞅瞅源码的样式,嗯,语法高亮还是可以的,辨识度还是挺高的. <!DOCTYPE html> <html> <head> <meta c ...

  5. ios 第一篇文章-xcode6.2键盘调不出来

    ios 第一篇文章 不晓得有没有人遇到过ios代码内调用键盘(keyboard)调不出来的情况,反正我是遇到了,按官方文档的说法调用键盘事件非常easy事实上: 我用了之后,不晓得为嘛,键盘就是不显示 ...

  6. 【LWJGL3】LWJGL3的内存分配设计,第一篇,栈上分配

    简介 LWJGL (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java绑定库.<我的世界> ...

  7. java课程设计之--Elasticsearch篇

    一.团队课程设计博客链接 https://www.cnblogs.com/Rasang/p/12169899.html 二.个人负责模块或任务说明 2.1Elasticsearch简介 Elastic ...

  8. 分析RAC下一个SPFILE整合的三篇文章的文件更改

    大约RAC下一个spfile分析_整理在_2014.4.17 说明:文章来源于网络 第一篇:RAC下SPFILE文件改动 在RAC下spfile位置的改动与单节点环境不全然一致,有些地方须要特别注意, ...

  9. 第一篇文章 vim的使用

    这么长时间以来,一直没有在博客园上写过博文.那第一篇博文就以vim的使用为开端吧. 不知道有多少人还在用着ctrl+c,ctrl+v这种方式,不过,就我个人而言,还是很倾向于vim的.不管是在服务器上 ...

随机推荐

  1. C++ 性能剖析 (一)

    C++ 性能剖析 (一) 性能问题也不是仅仅用“技术”可以解决的,它往往是架构,测试,假设等综合难题.不过,对于一个工程师来说,必须从小做起,把一些“明显”的小问题解决.否则的话积小成多,千里堤坝,溃 ...

  2. Python hashlib模块 (主要记录md5加密)

    python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) >>> import hashlib > ...

  3. modelsim遇到的问题(更新)

    1.Q:在`timescale处提示错误:** Error: C:\count4\count_tp.v(1): near "'t": Illegal base specifier ...

  4. Solr4.8.0源码分析(3)之index的线程池管理

    Solr4.8.0源码分析(3)之index的线程池管理 Solr建索引时候是有最大的线程数限制的,它由solrconfig.xml的<maxIndexingThreads>8</m ...

  5. STM32库中 __IO 修饰符(volatile修饰符)

    STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原 ...

  6. System.Web.Http.Tracing 在webapi里面应用

    最近想写log.再接口里面 所以就想到了.net 4.0提供的这个类. 整好.配合asp.net api好使用 ,而且 本地调试会在 vs Output 里面输出. 1.开启这个Tracing con ...

  7. DC-DC芯片 同步和異步方式有什么區別

    同步方式是集成了High side和Low side MOSFET,組成同步整流模式,可實現高效率,價格相對貴.異步方式只有High side MOSFET;配合外部使用傳統的續流二極管,組成非同步整 ...

  8. Windows消息拦截技术的应用

    Windows消息拦截技术的应用 民航合肥空管中心 周毅 一.前 言 众所周知,Windows程式的运行是依靠发生的事件来驱动.换句话说,程式不断等待一个消息的发生,然后对这个消息的类型进行判断,再做 ...

  9. Java中的局部代码块、构造代码块、静态代码块

    局部代码块: 作用:控制变量的生命周期: 在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计 ...

  10. ArcGis : unable to save as template this document is already based on another template

    原文:http://forums.esri.com/Thread.asp?c=93&f=989&t=289930 ----------------- I ran into this p ...