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项目】 文件,结构体,链表,排序, 学生信息管理系统(示例代码)...相关推荐

  1. c语言链表成绩管理系统排序,【C项目】 文件,结构体,链表,排序, 学生信息管理系统...

    1.密码登录: 2.通过键盘输入学生信息,包括学生学号.姓名.成绩: 3.将输入的信息保存到指定文件中: 4.从文件中读取学生信息: 5.显示全部学生信息: 6.按学生总分进行降序排序: 7.删除学生 ...

  2. c++ 结构体中不同类型的初始值_Golang语言基础教程:结构体

    1.1 什么是结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 1.2 结构体的定义和初始化 ...

  3. c语言结构体函数排序,(为什么不能给分?)结构体数组插入排序的函数有关问题,...

    当前位置:我的异常网» C语言 » (为什么不能给分?)结构体数组插入排序的函数有关 (为什么不能给分?)结构体数组插入排序的函数有关问题, www.myexceptions.net  网友分享于:2 ...

  4. C语言——结构体链表,附完整示例

    引用自身的结构体,一个结构体中有一个或多个成员的基类型就是本结构体类型时,说明这个结构体可以引用自己,所以称作引用自身的结构体. 例如下面的结构体: struct link{ char ch; str ...

  5. 【C语言】结构体-求出学生的平均成绩放在成员ave中

    先说下什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂 ...

  6. C语言 · 运用结构体的排序方法

    AllSight C语言 · 运用结构体的排序方法 之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目 ...

  7. C语言结构体自定义排序

    结构体自定义排序: 在最基础的C语言中,排序较为简单的有三种:冒泡,选择,插入.其中选择最劣.复杂一点的有快速排序和归并排序,在这里后两种我就不介绍了. 在使用结构体排序的时候,里面可能有许多不同的对 ...

  8. (篇十)用结构体数组处理学生成绩、结构体类型函数求平均值

    文章目录 一.结构体变量 二.用结构体数组处理学生成绩 三.结构体类型函数求平均值 用C语言学好结构化编程逻辑!本篇主要分析结构体数组和结构体类型的函数,对于二级C语言来说,主要是考处理学生多个成绩上 ...

  9. C语言函数指针(结构体函数指针)

    文章目录 20211126 这篇讲得好 参考文章1:C语言函数指针(指向函数的指针)详解 函数指针的定义形式: returnType (*pointerName)(param list); 示例代码: ...

最新文章

  1. JAVA从数据库中拿到数据
  2. android美拍相机
  3. Fibonacci Tree HDU - 4786——解题报告
  4. 商户定价模型—风控人又一经典必学知识
  5. css预处理器_【第十一课】初尝CSS的预处理器
  6. mysql drivermanager.getconnection_Java DriverManager.getConnection()方法:获取数据库连接
  7. 快速学习、快速决策、快速改变;突破自我
  8. 仿网易云音乐移动端html模板,使用jQuery仿制网易云音乐移动端
  9. 我爸的电脑中了勒索病毒
  10. pascal行人voc_Pascal Voc数据集详细分析
  11. 今日头条张一鸣:做CEO要避免理性的自负
  12. 三款Linux文件传输工具简单介绍
  13. 云笔记横向评测:印象笔记、有道云笔记、为知笔记、OneNote、Notion
  14. 详解LDC架构-设计业务异地多活架构
  15. redis为什么快?
  16. GDT陶瓷气体放电管的材质介绍
  17. mysql 导出gtid_mysqldump导出时 --set-gtid-purged=OFF
  18. 游戏里的小哥哥小姐姐都是怎么来的?
  19. Python 自动化办公-玩转 Word
  20. NVML编译官方用例报错

热门文章

  1. MySQL 怎么插入10天前的日期_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
  2. 腾讯Libpag研究1(扫盲和介绍)
  3. Android-美化控件
  4. Java简介与环境配置
  5. 高龄“潮男”优衣库老板柳井正_榜样_奢华主义_YOKA时尚网
  6. GNSS数据下载网址 汇总大全 [2020.9.22更新]
  7. Linux之逻辑卷的制作
  8. 免费使用高性能的GPU和TPU—谷歌Colab使用教程
  9. 你好Python -- 极简Python教程
  10. ONAP平台架构与5G蓝图