#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. error: File not found by glob???

    引发上述问题的几种情形: 1.rpm包的包名中含有“[.]”这类特殊符号; 2.执行rpm -ivh xxxx.rpm时,xxxx包名不存在; 3.rpm包顶层的目录名不存在或者存在问题:     - ...

  2. MLlib-分类与回归

    MLlib支持二分类,多酚类和回归分析的多种方法,具体如下: 问题类别 支持方法 二分类 线性支持向量机, 逻辑回归,决策树,朴素贝叶斯 多分类 决策树,朴素贝叶斯 回归 线性最小二乘,Lasso,r ...

  3. C# 基于委托的事件

    事件基于多播委托的特性. 多播委托事实上就是一组类型安全的函数指针管理器,调用则执行顺序跳转到数组里所有的函数指针里执行. class Program { public class CarInfoEv ...

  4. pojShredding Company

    http://poj.org/problem?id=1416 #include<cstdio> #include<cstring> #define MAXN 100 using ...

  5. listView中setOnItemClickListener和getSelectedItemPosition()取不到position问题

    //也可以采用通过listview 索引 取得 item 可以转化到 cursor ,pos 是在listview 的选中事件中赋值. //Cursor v2 = (Cursor) listView. ...

  6. -_-#【Angular】自定义过滤器

    AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta chars ...

  7. app开发历程————Android程序解析服务器端的JSON格式数据,显示在界面上

    上一篇文章写的是服务器端利用Servlet 返回JSON字符串,本文主要是利用android客户端访问服务器端链接,解析JSON格式数据,放到相应的位置上. 首先,android程序的布局文件main ...

  8. 利用C++11的function和bind简化类创建线程

    问题引出 当在类中需要创建线程时,总是因为线程函数需要定义成静态成员函数,但是又需要访问非静态数据成员这种需求,来做若干重复性的繁琐工作.比如我以前就经常定义一个静态成员函数,然后定一个结构体,结构体 ...

  9. Java学习日记-6 继承

    继承1.基本介绍 面向对象程序设计三大原则之一.被继承的称为父类,继承类称为子类.关键字:extends例子: class TwoDshape{ double width; double height ...

  10. X86 I/O端口

    与外设的交互都是通过读写外设上的寄存器进行的,外设的寄存器也成为“I/O端口”,它有两种编制方式:统一编址和独立编址. 统一编址: 外设接口中的IO寄存器(即IO端口)与主存单元一样看待,每个端口占用 ...