#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. $_CFG = load_config(); /* 载入系统参数 */

    ecshop 中$_CFG数组主要是放置一些系统参数,并且全站共享的数据,在使用的时候,ecshop里面常常以$GLOBALS['_CFG']全局变量的模式来处理. ecshop 的$GLOBALS[ ...

  2. bind函数

    bind函数把一个本地协议地址赋予一个套接字 对于网际协议,协议地址是32位的IPv4地址或128位的IPv6与16位的TCP或UDP端口号的组合 int bind ( int sockfd, con ...

  3. Android 数据库读取数据显示优化 Application [6]

    Application和Activity,Service一样是android框架的一个系统组件, 当android程序启动时系统会创建一个application对象,用来存储系统的一些信息. 通常我们 ...

  4. 转:Java开发牛人十大必备网站

    原文来自于:http://www.importnew.com/7980.html 以下是我收集的Java开发牛人必备的网站.这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题.面试问题等.质 ...

  5. hadoop安装问题记录

    start-yarn.sh 启动正常,但是无法访问网页http://localhost:8088/cluster 原因: 可能是ipv6 的问题 解决方法: http://stackoverflow. ...

  6. 移動電源ic的概述

    移動電源ic壹種集供電和充電功能於壹體的便攜式充電器,可以給手機等數碼設備隨時隨地充電或待機供電.壹般由鋰電芯或者幹電池作為儲電單元.區別於產品內部配置的電池,也叫外掛電池.壹般配備多種電源轉接頭, ...

  7. keil C51绝对地址访问

    在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...

  8. 创建组合索引SQL从1个多小时到1S的案例

    select aa.acct_org, aa.loan_acct_no, aa.FUNCTIONARY, aa.cust_no, sum(dwm.pkg_tools.currcdtran(bb.INT ...

  9. 【线段树】HDU 5443 The Water Problem

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 题目大意: T组数据.n个值,m个询问,求区间l到r里的最大值.(n,m<=1000) ...

  10. 使用GDB生成coredump文件【转载】

    本文转载自: http://blog.csdn.net/sky_qing/article/details/8548989 如果在测试过程中遇到某个进程的CPU利用率过高或者卡死而需要去调试该进程时,可 ...