学生考勤日期链表排序c语言,【C项目】 文件,结构体,链表,排序, 学生信息管理系统(示例代码)...
1、密码登录;
2、通过键盘输入学生信息,包括学生学号、姓名、成绩;
3、将输入的信息保存到指定文件中;
4、从文件中读取学生信息;
5、显示全部学生信息;
6、按学生总分进行降序排序;
7、删除学生信息;
8、查找学生信息,可以通过学号查找,也可以通过姓名查找;
9、统计学生信息,统计出最高分和学生人数;
10、退出系统;
源代码:[email protected]:~$ cat main.c
#include
#include
#include
struct student
{
char num[9];
char name[9];
int scorem;
int scoree;
int scorec;
int sum;
struct student *next;
};
struct student *creat(struct student *p)//创建链表
{
struct student *p1 = NULL;
p1 = (struct student*)malloc(sizeof (struct student));
p -> next = p1;
p1 -> next = NULL;
printf("请输入要添加的学生的信息\n");
printf("学号:");scanf("%s",p1 -> num);
printf("姓名: ");scanf("%s",p1 -> name);
printf("数学成绩:");scanf("%d",&p1 -> scorem);
printf("英语成绩:"); scanf("%d",&p1 -> scoree);
printf("C语言成绩:");scanf("%d",&p1 -> scorec);
p1 -> sum = 0;
p1 -> sum = p1 -> scorem + p1 -> scorec + p1 -> scoree;
printf("总分:%d",p1 -> sum);
return p1;
}
void save1(struct student *p)//将链表从内存保存到文件中
{
FILE *fp;
if ((fp = fopen("student_system.txt","ab+")) == NULL)
printf("创建失败!\n");
while(p != NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p = p -> next;
}
fclose(fp);
printf("保存成功!\n");
}
void save2(struct student *p)//将以变动的链表信息存入到文件中
{
FILE *fp;
if ((fp = fopen("student_system.txt","wb")) == NULL)
printf("创建失败!\n");
while(p != NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p = p -> next;
}
fclose(fp);
}
struct student *read()//把文件中的数据读到链表中
{
FILE *fp;
struct student *head=NULL,*p1=NULL,*p2=NULL;
if ((fp=fopen ("student_system.txt","rb+"))==NULL)
{
printf ("读取时,文件打开失败!\n");
return NULL;
}
head=p1=(struct student *)malloc (sizeof (struct student ));
while (fp != NULL)
{
if (fread(p1,sizeof (struct student ),1,fp) != 1)break;
p1 -> next = (struct student *)malloc (sizeof (struct student ));
p2= p1;
p1= p1 -> next;
}
p2->next = NULL;
fclose (fp);
return head;
}
struct student *input()//添加函数
{
char ch;
struct student *p = NULL,*head=NULL;
head=p = (struct student*)malloc(sizeof(struct student));
p-> next = NULL;
printf("请输入要添加的学生的信息\n");
printf("学号:"); scanf("%s",p -> num);
printf("姓名: "); scanf("%s",p -> name);
printf("数学成绩:");scanf("%d",&p -> scorem);
printf("英语成绩:");scanf("%d",&p -> scoree);
printf("C语言成绩:");scanf("%d",&p -> scorec);
p -> sum = 0;
p -> sum = p -> scorem + p -> scorec + p -> scoree;
printf("总分:%d",p -> sum);
for (;;)
{
printf ("\n是否继续输入学生信息?( y / n ):\n");
getchar( );
ch = getchar ( );
if (ch == ‘y‘|| ch == ‘Y‘)
p = creat(p);
else if(ch==‘n‘|| ch==‘N‘)
{
save1 (head);
break;
}
else
printf ("您的输入有误,请重新输入,");
}
return p->next;
}
struct student *output()//输出函数,查看全部学生信息
{
struct student *p ;
p = read();
if(read==NULL)
exit(1);
printf("\n *************************STUDENT***********************\n");
printf(" -------------------------------------------------------\n");
printf(" |学号|姓名|数学|英语|C语言|总分|\n");
printf(" -------------------------------------------------------\n");
while (p != NULL)
{
p -> sum = 0;
p -> sum = p -> scorem + p -> scoree + p -> scorec;
printf("|%4s |%-4s|%3d |%3d|%3d|%3d|\n",p->num,
p->name,p->scorem,p->scoree,p->scorec,p->sum);
printf(" -------------------------------------------------------\n");
p = p -> next;
}
return p;
}
struct student *search()//查找函数
{
int n;
char a[9],b[9];
struct student *p = NULL,*head = NULL;
printf("请您选择要查找的方式:1 按姓名2 按学号\n");
scanf("%d",&n);
if(n==1)
{
printf("请输入您要查找的学生的姓名:\n");
scanf("%s",a);
p=head=read();
while(p!=NULL)
{
if(p==NULL)
{
printf("对不起,没有您要找的人。\n");
}
if(strcmp(p -> name,a)==0)
{
printf("\n *************************STUDENT***********************\n");
printf(" -------------------------------------------------------\n");
printf(" | 学号 |姓名|数学|英语| C语言 |总分 |\n");
printf(" -------------------------------------------------------\n");
printf(" | %4s |%-4s|%3d | %3d|%3d|%3d|\n",p->num,
p->name,p->scorem,p->scoree,p->scorec,p->sum);
printf(" -------------------------------------------------------\n");
break;
}
p=p->next;
}
}
if(n==2)
{
printf("请输入您要查找的学生的学号:\n");
scanf("%s",b);
p=head=read();
while(p!=NULL)
{
if(p==NULL)
{
printf("对不起,没有您要找的人。\n");
}
if(strcmp(p -> num,b)==0)
{
printf("\n *************************STUDENT***********************\n");
printf(" -------------------------------------------------------\n");
printf(" | 学号 |姓名|数学|英语| C语言 |总分 |\n");
printf(" -------------------------------------------------------\n");
printf(" | %4s |%-4s|%3d | %3d|%3d|%3d|\n",p->num,
p->name,p->scorem,p->scoree,p->scorec,p->sum);
printf(" -------------------------------------------------------\n");
break;
}
p=p->next;
}
}
return head;
}
struct student *dele()//删除函数
{
struct student *p1=NULL,*p2=NULL,*head=NULL;
char a[9];
output();
printf ("请输入需要删除信息的人的姓名:\n");
scanf ("%s",a);
p1=head=read();
if(head==NULL)
{
printf("对不起,暂时没有信息,无法删除。\n");
}
while (head!=NULL)
{
if(strcmp(a,head -> name) != 0 && p1->next!=NULL )
{
p2=head ;
head= head->next ;
if(head==NULL) break;
}
if(strcmp(a,head -> name) == 0 && p1==head)
{
p1=head->next ;
}
if(strcmp(a,head->name)==0)
{
p2->next=head->next;
save2(p1);
printf("该学生的信息删除成功!");
break;
}
}
if(head==NULL)
printf("对不起,没有该学生的信息。\n");
return head;
}
struct student *change()//修改函数
{
int a;
char x[9];
struct student *p = NULL,*head = NULL,*q = NULL;
output();
p = head = read();
printf("请输入要修改的人的姓名:\n");
scanf("%s",x);
if(p == NULL)
{
printf("没有这个人!\n");
exit(1);
}
while (p != NULL)
{
if (strcmp(p -> name,x) == 0)
{
q = p;
break;
}
p = p -> next;
}
if(p!=NULL)
{
printf("请选择修改的内容:\n");
printf("1.姓名\n");
printf("2.学号\n");
printf("3.数学成绩\n");
printf("4.英语成绩\n");
printf("5.C成绩\n");
do
{
scanf ("%d",&a);
if(a 6)
printf ("您输入的数字有误,请重新输入:\n");
}while (a<=0||a>=6);
switch (a)
{
case 1 :printf("请输入更改后的姓名:\n");scanf("%s",p -> name); break;
case 2 :printf("请输入更改后的学号:\n");scanf("%s",p -> num);break;
case 3 :printf("请输入更改后的数学成绩:\n");scanf("%d",&p -> scorem);break;
case 4 :printf("请输入更改后的英语成绩:\n");scanf("%d",&p -> scoree);break;
case 5 :printf("请输入更改后的C成绩:\n"); scanf("%d",&p -> scorec);break;
}
p->sum =0;
p->sum=p->scorem +p->scoree +p->scorec ;
printf("更改后的总分:%d",p->sum);
save2 (head);
output();
}
if(p==NULL)
{
printf("对不起,没有这个人。\n");
}
return head;
}
struct student *sortsum(struct student*head)//排序函数
{
struct student*p,*p1,*p2,*p3;
struct student m, n;
if (head == NULL) return NULL;
m.next=head;
p=&m;
while (p->next!=NULL)
{
p=p->next;
}
p=p->next=&n;
while (p!=m.next)
{
p3=&m;
p1=p3->next;
p2=p1->next;
while (p2!=p)
{
if ((p1 -> sum) sum) )
{
p1->next=p2->next;
p2->next=p1;
p3->next=p2;
p3=p2;
p2=p1->next;
}
else
{
p3=p1;
p1=p2;
p2=p2->next;
}
}
p=p1;
}
while (p->next!=&n)
{
p=p->next;
}
p->next=NULL;
return m.next;
}
struct student *outputsortsum()//总分排序输出
{
int i=0;
struct student *head = NULL , *p = NULL;
head = read();
p = sortsum(head);
printf("\n*************************STUDENT****************************\n");
printf("------------------------------------------------------------\n");
printf("| 名次 | 学号 | 姓名 |数学 |英语 | C语言 |总分 |\n");
printf("------------------------------------------------------------\n");
while(p != NULL)
{
i++;
printf("| %3d| %4s |%-4s|%3d|%3d|%3d|%3d|\n",i,p->num,
p->name,p->scorem,p->scoree,p->scorec,p->sum);
printf("------------------------------------------------------------\n");
p=p->next;
}
return head;
}
struct student *statistic()//统计函数
{
int m = 0;
struct student *head=NULL;
struct student *p,*q;
p = head = read();
while( p != NULL)
{
m++;
p = p -> next;
}
printf("总共有%d个学生信息.\n\n",m);
q= sortsum(head);
printf("分数最高的学生的信息:\n");
printf("\n***********************STUDENT*************************\n");
printf("-------------------------------------------------------\n");
printf("| 学号 |姓名|数学|英语| C语言 |总分 |\n");
printf("-------------------------------------------------------\n");
printf("| %4s |%-4s|%3d |%3d |%3d| %3d |\n",q->num,
q->name,q->scorem,q->scoree,q->scorec,q->sum);
printf("-------------------------------------------------------\n");
return head;
}
void login1 ()
{
while(1)
{
int a=1;
int i;
char ch[10];
char num[20]={"abcde"};
printf("进入管理员成绩管理系统之前请先输入密码\n");
printf("请输入您的密码 : ");
scanf("%s",ch);
if(strcmp(num,ch)==0)
{
a = 0;
}
if(a!=0)
{
printf("\n这个密码是错误的! ");
printf("\n请输入正确的密码:");
}
else
{
break;
}
}
}
void login2 ()
{
while(1)
{
int a=1;
int i;
char ch[10];
char num[20]={"12345"};
printf("进入学生成绩管理系统之前请先输入密码\n");
printf("请输入您的密码 :");
scanf("%s",ch);
if(strcmp(num,ch)==0)
a = 0;
if(a==0)
{
printf("\n欢迎进入学生成绩管理系统 !\n");
getchar();
break;
}
else
{
printf("\n这个密码是错误的! ");
printf("\n请输入正确的密码:");
}
}
}
void menu1()
{
system("clear");
printf("欢迎进入管理员管理系统!\n");
printf("*******************************主菜单****************************\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("*****************************************************************\n");
}
void menu2()
{
system("clear");
printf("欢迎进入学生管理系统!\n");
printf("*******************************主菜单****************************\n");
printf("*1 查找学生成绩*\n");
printf("*2 总分排序信息*\n");
printf("* 3 查看全部信息*\n");
printf("*4 统计学生人数*\n");
printf("* 5 停止程序运行*\n");
printf("*****************************************************************\n");
}
void main()
{
int a,m;
int b = 1;
system("clear");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("教务管理系统欢迎您!\n");
printf("请选择您要进入的管理系统 \n");
printf("1.管理员管理系统。\n");
printf("2.学生管理系统。\n");
printf("3.退出系统!\n");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("请您选择: ");
scanf("%d",&m);
if(m==1){login1();}
if(m==2){login2();}
while (b == 1)
{
if(m==1)
{
menu1();
scanf("%d",&a);
switch(a)
{
case 1 :input();break;
case 2 :search(); break;
case 3 :dele();break;
case 4 :change(); break;
case 5 :outputsortsum();break;
case 6 :output(); break;
case 7 :statistic();break;
case 8 :exit(1);
default :printf("输入错误!\n");break;
}
printf("\n\n请选择接下来的操作:\n");
printf(" 1 . 返回主菜单 2 . 退出程序\n");
scanf("%d",&b);
}
if(m==2)
{
menu2();
scanf("%d",&a);
switch(a)
{
case 1 :search(); break;
case 2 :outputsortsum();break;
case 3 :output(); break;
case 4 :statistic();break;
case 5 :exit(1);
default :printf("输入错误!\n");break;
}
printf("\n\n请选择接下来的操作:\n");
printf(" 1 . 返回主菜单 2 . 退出程序\n");
scanf("%d",&b);
}
if(m==3)
exit (1);
}
}
[email protected]:~$
编译运行:[email protected]:~$ gcc main.c && ./a.out
★★★★★★★★★★★★★★★★★★★★★★★★★★★
教务管理系统欢迎您!
请选择您要进入的管理系统
1.管理员管理系统。
2.学生管理系统。
3.退出系统!
★★★★★★★★★★★★★★★★★★★★★★★★★★★
请您选择: 1
进入管理员成绩管理系统之前请先输入密码
请输入您的密码 : abcde
欢迎进入管理员管理系统!
*******************************主菜单****************************
*1 添加学生成绩*
*2 查找学生成绩*
*3 删除指定学生*
* 4 修改学生信息*
*5 总分排序信息*
*6 查看全部信息*
*7 统计学生人数*
*8 停止程序运行*
*****************************************************************
6
*************************STUDENT***********************
-------------------------------------------------------
|学号|姓名|数学|英语|C语言|总分|
-------------------------------------------------------
| 1 |lucy| 12 | 32| 0| 44|
-------------------------------------------------------
| 45 |34 |354 |343|4234|4931|
-------------------------------------------------------
请选择接下来的操作:
1 . 返回主菜单 2 . 退出程序
学生考勤日期链表排序c语言,【C项目】 文件,结构体,链表,排序, 学生信息管理系统(示例代码)...相关推荐
- c语言链表成绩管理系统排序,【C项目】 文件,结构体,链表,排序, 学生信息管理系统...
1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生 ...
- c++ 结构体中不同类型的初始值_Golang语言基础教程:结构体
1.1 什么是结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 1.2 结构体的定义和初始化 ...
- c语言结构体函数排序,(为什么不能给分?)结构体数组插入排序的函数有关问题,...
当前位置:我的异常网» C语言 » (为什么不能给分?)结构体数组插入排序的函数有关 (为什么不能给分?)结构体数组插入排序的函数有关问题, www.myexceptions.net 网友分享于:2 ...
- C语言——结构体链表,附完整示例
引用自身的结构体,一个结构体中有一个或多个成员的基类型就是本结构体类型时,说明这个结构体可以引用自己,所以称作引用自身的结构体. 例如下面的结构体: struct link{ char ch; str ...
- 【C语言】结构体-求出学生的平均成绩放在成员ave中
先说下什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂 ...
- C语言 · 运用结构体的排序方法
AllSight C语言 · 运用结构体的排序方法 之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目 ...
- C语言结构体自定义排序
结构体自定义排序: 在最基础的C语言中,排序较为简单的有三种:冒泡,选择,插入.其中选择最劣.复杂一点的有快速排序和归并排序,在这里后两种我就不介绍了. 在使用结构体排序的时候,里面可能有许多不同的对 ...
- (篇十)用结构体数组处理学生成绩、结构体类型函数求平均值
文章目录 一.结构体变量 二.用结构体数组处理学生成绩 三.结构体类型函数求平均值 用C语言学好结构化编程逻辑!本篇主要分析结构体数组和结构体类型的函数,对于二级C语言来说,主要是考处理学生多个成绩上 ...
- C语言函数指针(结构体函数指针)
文章目录 20211126 这篇讲得好 参考文章1:C语言函数指针(指向函数的指针)详解 函数指针的定义形式: returnType (*pointerName)(param list); 示例代码: ...
最新文章
- JAVA从数据库中拿到数据
- android美拍相机
- Fibonacci Tree HDU - 4786——解题报告
- 商户定价模型—风控人又一经典必学知识
- css预处理器_【第十一课】初尝CSS的预处理器
- mysql drivermanager.getconnection_Java DriverManager.getConnection()方法:获取数据库连接
- 快速学习、快速决策、快速改变;突破自我
- 仿网易云音乐移动端html模板,使用jQuery仿制网易云音乐移动端
- 我爸的电脑中了勒索病毒
- pascal行人voc_Pascal Voc数据集详细分析
- 今日头条张一鸣:做CEO要避免理性的自负
- 三款Linux文件传输工具简单介绍
- 云笔记横向评测:印象笔记、有道云笔记、为知笔记、OneNote、Notion
- 详解LDC架构-设计业务异地多活架构
- redis为什么快?
- GDT陶瓷气体放电管的材质介绍
- mysql 导出gtid_mysqldump导出时 --set-gtid-purged=OFF
- 游戏里的小哥哥小姐姐都是怎么来的?
- Python 自动化办公-玩转 Word
- NVML编译官方用例报错
热门文章
- MySQL 怎么插入10天前的日期_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
- 腾讯Libpag研究1(扫盲和介绍)
- Android-美化控件
- Java简介与环境配置
- 高龄“潮男”优衣库老板柳井正_榜样_奢华主义_YOKA时尚网
- GNSS数据下载网址 汇总大全 [2020.9.22更新]
- Linux之逻辑卷的制作
- 免费使用高性能的GPU和TPU—谷歌Colab使用教程
- 你好Python -- 极简Python教程
- ONAP平台架构与5G蓝图