功能介绍
1.添加学生信息;
2.对学生信息进行排序;
3.删除学生信息;
4.查询学生信息;
5.修改学生信息;
6.输出学生信息;
7.清屏;
main函数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
int n;
int len=sizeof(struct student);
struct student *p=NULL;
//上面三个是全局变量,但在主函数页面定义的全局变量在其他页面使用时
//要进行拓展(用extern),并且全局变量在所有页面的任何函数中都可以
//对其进行修改和重新赋值,且全局变量在各个位置大小都相同。且任何页
//面的的任何函数都不可以再定义与全局变量同名的变量。
//全局变量不要在头文件中定义,要在main.c文件前面定义,但可以在头文
//件中进行拓展。
/*
如果全局变量在main.c进行定义时直接赋值了,在头文件中进行拓展后,
任何页面用到这个全局变量都为之前的赋值。但是在任何页面都可以再次
对全局变量进行赋值,重新赋值后,在任何页面再次运用到此变量时就会
是之后赋的值。除非程序结束后再次运行时才会变为最开始的值。
*/
int main()
{
sayhello();
int com;
while(1)
{
introduce();
if(scanf("%d",&com)!=1)
{
printf("*******您输入的指令不正确请重新输入*******\n");
fflush(stdin);//清除缓存区;如果不清除缓存区,错误信息因为未完成赋值操作会一直停留在缓存区,
//下一次循环到这里时仍会赋值不成功,如此往复,造成死循环。因此一定要清除缓存区!!!
continue;//结束本次输入进行下次输入
}
else
switch(com)
{
case 0:saygoodbye();exit(1);//退出
case 1:add();break;//添加
case 2:outputs();break;//排序
case 3:del1();break;//删除
case 4:find1();break;//查询
case 5:change1();break;//修改
case 6://清屏
system("cls");//系统内自带的清屏函数
break;
case 7:outputs();break;//输出
default:printf("*****************没有该指令,请重新输入*****************\n");
}
}
return 0;
}
头文件 stu.h
#ifndef STU_H_INCLUDED
#define STU_H_INCLUDED
extern int n;
extern int len;//在头文件中进行扩展就不用在没个页面前面都拓展了,只需要在每页的前面调用头文件即可。
extern struct student *p;//因为头文件已经包含了。
struct student
{
int no;
char name[20];
char sex[5];
double score[5];
double sum;
double ave;
int position;
};
//HelloGoodbye.c;
void sayhello();
void saygoodbye();
//introduce.c
void introduce();
//add.c
void input(struct student *q,int m);
void inputs(int m);
void add();
//output.c
void output(struct student *q);
void outputs();
//sort.c
void sort1();
//del.c
int del2(int no);
void del1();
//find.c
struct student find2(int no);
void find1();
//change.c
int change2(int no);
void change1();
#endif // STU_H_INCLUDED
页眉页脚 HelloGoodbye.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
void sayhello()
{
printf("***************************************\n");
printf("************欢迎使用本系统*************\n");
printf("***********本系统由某某某编写************\n");
printf("***********指导教师:某某某************\n");
printf("***************************************\n");
}
void saygoodbye()
{
printf("\n");
printf("***********************************************\n");
printf("****(≧ω≦)/****欢迎下次使用!*****(*≧▽≦)**\n");
printf("***********************************************\n");
}
程序功能介绍函数 introduce.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
void introduce()
{
printf("本系统功能介绍\n");
printf("1表示添加学生信息\n");
printf("2表示对学生成绩进行排序\n");
printf("3表示删除学生信息\n");
printf("4表示查询学生信息\n");
printf("5表示修改学生信息\n");
printf("6表示清屏\n");
printf("7表示输出学生信息\n");
printf("0表示退出系统\n");
}
输出学生信息函数 output.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
void output(struct student *q)
{
printf("%-10d %-10s %-8s %-10.2lf %-10.2lf %-10.2lf %-10.2lf %-13.2lf %-10d\n",(*q).no,(*q).name,(*q).sex,(*q).score[1],(*q).score[2],(*q).score[3],(*q).sum,(*q).ave,(*q).position);
}
void outputs()
{
int i;
if(n==0)
{
printf("********目前还没有学生信息,请先输入学生信息!*********\n");
}
else
{printf("学号 姓名 性别 成绩1 成绩2 成绩3 总成绩 平均成绩 名次\n");
for(i=0;i<n;i++)
{
output(p+i);
}
}
}
学生信息排序函数 sort.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
void sort1()
{
struct student s;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(p[j].sum<p[j+1].sum)
{
s=p[j];
p[j]=p[j+1];
p[j+1]=s;
}
}
}
for(i=0;i<n;i++)
{
p[i].position=i+1;
}
}
添加学生信息函数 add.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
void input(struct student *q,int m)
{
printf("请输入学生信息 格式为:\n");
printf("学号 姓名 性别 成绩1 成绩2 成绩3\n");
int i;
for(i=0;i<m;i++)
{
if(i>=1)printf("***************请继续输入********************\n");
scanf("%d %s %s %lf %lf %lf",&(q+i)->no,(q+i)->name,(q+i)->sex,&(q+i)->score[1],&(q+i)->score[2],&(q+i)->score[3]);
(q+i)->sum=(q+i)->score[1]+(q+i)->score[2]+(q+i)->score[3];
(q+i)->ave=((q+i)->sum)/3;
}
sort1();
}
void inputs(int m)
{
int i;
if(n==0)
{
p=(struct student*)malloc(m*len);
if(p==NULL)
{
printf("*************系统无法分配内存*****************\n");
exit(1);
}
else
n=m,input(p,m);
}
else if(n!=0)
{
p=(struct student*)realloc(p,(n+m)*len);
if(p==NULL)
{
printf("****************系统无法分配内存*************\n");
exit(1);
}
else
n=n+m,input(p+n-m,m);
}
}
void add()
{
printf("1表示从键盘添加学生信息\n");
printf("2表示从文件添加学生信息\n");
int com,n,m;
scanf("%d",&com);
if(com==1)
{
printf("请输入要添加学生的人数\n");
scanf("%d",&m);
inputs(m);
}
}
删除学生信息函数 del.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
int del2(int no)
{
int i,k,flag=0;
for(i=0;i<n;i++)
{
if(p[i].no==no)
{
k=i;
flag=1;
break;
}
}
if(flag==1)
{
for(i=k;i<n-1;i++)
{
p[i]=p[i+1];
}
p=(struct student*)realloc(p,(n-1)*len);
n=n-1;
sort1();
}
return flag;
}
void del1()
{
int no,flag,m;
if(n==0)
printf("*************目前还没有学生信息,请先输入学生信息***********\n");
else{printf("*************请输入要删除学生的学号*************\n");
scanf("%d",&m);
flag=del2(m);
if(flag==0)
{
printf("**********未寻找到该学生信息,请检查后在输入!**************\n");
}
else
printf("**************删除学生信息成功!!!*****************\n");
}
}
查找学生信息函数 find.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
struct student find2(int no)
{
int i;
struct student s1;
s1.no=0;//结构体不能赋值NULL,但地址可以。所以struct student s1=NULL是错误的
for(i=0;i<n;i++)
{
if(p[i].no==no)
{
s1=p[i];
break;
}
}
return s1;
}
void find1()
{
struct student s1;
int no;
if(n==0)printf("*************目前还没有学生信息,请先输入学生信息***********\n");
else
{printf("**********请输入要查找学生的学号**********\n");
scanf("%d",&no);
s1=find2(no);
if(s1.no==0)
printf("***********未查询到该学生的学生信息!************\n");
else
{
printf("学号 姓名 性别 成绩1 成绩2 成绩3 总成绩 平均成绩 名次\n");
printf("%-10d %-10s %-8s %-10.2lf %-10.2lf %-10.2lf %-10.2lf %-13.2lf %-10d\n",s1.no,s1.name,s1.sex,s1.score[1],s1.score[2],s1.score[3],s1.sum,s1.ave,s1.position);
}
}
}
修改学生信息函数 change.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
int change2(int no)
{
int i,k=-1;
for(i=0;i<n;i++)
{
if(p[i].no==no)
{
k=i;
break;
}
}
return k;
}
void change1()
{
int no,k;
if(n==0)printf("*************目前还没有学生信息,请先输入学生信息***********\n");
else
{printf("**********请输入要修改学生的学号**********\n");
scanf("%d",&no);
k=change2(no);
if(k==-1)
printf("***********未查询到该学生的学生信息!************\n");
else
{
printf("***********请输入要修改的学生的全部信息************\n");
printf("学号 姓名 性别 成绩1 成绩2 成绩3\n");
scanf("%d %s %s %lf %lf %lf",&p[k].no,p[k].name,p[k].sex,&p[k].score[1],&p[k].score[2],&p[k].score[3]);
p[k].sum=p[k].score[1]+p[k].score[2]+p[k].score[3];
p[k].ave=p[k].sum/3;
sort1();
printf("*************修改成功!*****************\n");
}
}
}
这是一个使用C语言编写的动态数组实现的学生信息管理系统,包括添加、排序、删除、查询、修改和输出学生信息等功能。程序由多个独立的函数组成,如主函数、输出函数、排序函数等。

被折叠的 条评论
为什么被折叠?



