怎样用c语言编写学生管理系统?

怎样用c语言编写学生管理系统?,第1张

1、一定要先写好主函数的框架,然后再往上面加东西,这样说有点笼统,我把我的主函数在下面,可以借鉴下哈。我的主函数是一个while(1)的无限循环,里面一个switch选择,利用一个菜单函数,让其返回值当成switch选择的值,然后进入不同的功能主函数,其他功能主函数和主函数的套路一样。

2、输入模块一定要注意输入的格式,我采用的尾插法,每次处理好一个节点后就让用户判定是否继续输入,在格式控制方面,我当用户输入一次,就判定它是否符号规范,如果不规范,就重新输入。最后存入文件中。

3、一定要把函数写的利用率高一点,这样就可以减少代码的重复书写,这个全凭自己的写代码的风格了,我自己在这点也没有做太好,反省中,以前刚开始学c的时候有人说c语言的主体是函数,不太懂,等写完这个,感觉说的真的很对,c语言的函数写好后,在该用的时候直接引用,很方便。

完整代码:

程序如下: #include\x0d\void main()\x0d\{\x0d\ float student[100][7];\x0d\//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,\x0d\//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名\x0d\ int n,i,j,k,p,t,count,flag;\x0d\ int a[100],b[100],c[100];\x0d\//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据\x0d\ printf("输入学生的个数:\n");\x0d\ scanf("%d",&n);\x0d\ for(i=0;ib[i+1])\x0d\ {\x0d\ c[i]=count;\x0d\ count++;\x0d\ }\x0d\ }\x0d\ printf("\n以下是统计结果:\n");\x0d\ printf("学号 s[1] s[2] s[3] s[4] 总分 平均分 排名\n");\x0d\ for(i=0;i

#include "stdioh"

main()

{ int a,b,c,A,B,C;

  printf("输入学生生日:");

  scanf("%d%d%d",&a,&b,&c);

  printf("输入当前日期:");

  scanf("%d%d%d",&A,&B,&C);

  if(a>A||a==A&&b>B||a==A&&b==B&&c>C)

  { printf("输入数据有误!");

    return 0;

  }

  printf("该学生现在为%d周岁\n",A-a+(b<B||b==B&&c<=C));

  return 0;

}

你是联大的把,你还要吗?

程序:

#include <stdioh>

#include <stdlibh>

#include <stringh>

int man=0;

int j;

char str[20];

struct student

{

char id[11];

char name[10];

int n1;

int n2;

int n3;

int n4;

int n5;

int n6;

int n7;

int n8;

int n9;

int zong;

int ping;

}student[100],temp;

void read(void)

{

FILE cj;

int i,k;

man=0;

while(1)

{

printf("请输入要读取的文件:\n");

scanf("%s",&str);

if((cj=fopen(str,"r"))==NULL)

{

printf("打开失败\n");

}

else

{

break;

}

}

for(i=0;i<500;i++)

{

if(fscanf(cj,"%s %s %d %d %d %d %d %d %d %d %d",&student[i]id,&student[i]name,&student[i]n1,&student[i]n2,&student[i]n3,&student[i]n4,&student[i]n5,&student[i]n6,&student[i]n7,&student[i]n8,&student[i]n9)==-1)

{

break;

}

man=man+1;

}

printf("从%s读取去了“%d”条记录\n",str,man);

for(k=0;k<man;k++)

{

student[k]zong=student[k]n1+student[k]n2+student[k]n3+student[k]n4+student[k]n5+student[k]n6+student[k]n7+student[k]n8+student[k]n9;

}

for(i=0;i<man;i++)

{

student[i]ping=student[i]zong/9;

}

fclose(cj);

}

void write(void)

{

FILE cj;

int i;

char me;

printf("请确认是否保存(是:y,否:任意键):\n");

scanf("%s",&me);

if(me=='y')

{

if((cj=fopen(str,"w"))==NULL)

{

printf("保存失败\n");

}

for(i=0;i<man;i++)

{

fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9);

}

printf("存了“%d”条记录到%s\n",man,str);

fclose(cj);

}

else

return;

}

void save(void)

{

FILE cj;

int i;

char me;

printf("请输入新的文件名:\n");

scanf("%s",&str);

printf("请确认是否保存(是:y,否:任意键):\n");

scanf("%s",&me);

if(me=='y')

{

if((cj=fopen(str,"w"))==NULL)

{

printf("保存失败\n");

}

for(i=0;i<man;i++)

{

fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9);

}

printf("存了“%d”条记录到%s\n",man,str);

fclose(cj);

}

else

return;

}

void print(void)

{

int i;

for(i=0;i<72;i++)

printf("");

printf("\n");

printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 平均分 总分 | \n");

for(i=0;i<man;i++)

{

printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9,student[i]ping,student[i]zong);

}

for(i=0;i<72;i++)

printf("");

printf("\n");

}

void inquiry(void)

{

int i;

char id[10];

while(1)

{

printf("请输入要查人的学号或名字(输入-1即返回上一级):\n");

scanf("%s",&id);

if(id[0]=='-'&&id[1]=='1')

{

printf("exit\n");

break;

}

else

{

for(i=0;i<man;i++)

{

if(strcmp(student[i]id,id)==0)

{

j=i;

break;

}

if(strcmp(student[i]name,id)==0)

{

j=i;

break;

}

j=-1;

}

if(j==-1)

{

printf("无此人\n");

}

else

{

printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 总分 平均分 | \n");

printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[j]id,student[j]name,student[j]n1,student[j]n2,student[j]n3,student[j]n4,student[j]n5,student[j]n6,student[j]n7,student[j]n8,student[j]n9,student[i]ping,student[i]zong);

}

}

}

}

void fail(void)

{

int i;

printf("有不及格成绩的学生为:\n");

for(i=0;i<man;i++)

{

if(student[i]n1<60||student[i]n2<60||student[i]n3<60||student[i]n4<60||student[i]n5<60||student[i]n6<60||student[i]n7<60||student[i]n8<60||student[i]n9<60)

{

printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9,student[i]ping,student[i]zong);

}

}

}

void compositor(void)

{

int i,k;

char m;

printf("请选择干什么排序:\n");

printf("1成绩1\n");

printf("2成绩2\n");

printf("3成绩3\n");

printf("4成绩4\n");

printf("5成绩5\n");

printf("6成绩6\n");

printf("7成绩7\n");

printf("8成绩8\n");

printf("9成绩9\n");

printf("0总成绩或平均成绩\n");

scanf("%s",&m);

if(m=='0')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]zong<student[i+1]zong)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='1')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n1<student[i+1]n1)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='2')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n2<student[i+1]n2)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='3')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n3<student[i+1]n3)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='4')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n4<student[i+1]n4)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='5')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n5<student[i+1]n5)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='6')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n6<student[i+1]n6)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='7')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n7<student[i+1]n7)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='8')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n8<student[i+1]n8)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else if(m=='9')

{

for(k=man;k>0;k--)

{

for(i=0;i<k;i++)

{

if(student[i]n9<student[i+1]n9)

{

temp=student[i];

student[i]=student[i+1];

student[i+1]=temp;

}

}

}

}

else

printf("无此功能\n");

}

void raise(void)

{

printf("请输入添加人的学号:\n");

scanf("%s",&student[man]id);

printf("请输入添加人的姓名:\n");

scanf("%s",&student[man]name);

printf("请输入添加人的成绩1:\n");

scanf("%d",&student[man]n1);

printf("请输入添加人的成绩2:\n");

scanf("%d",&student[man]n2);

printf("请输入添加人的成绩3:\n");

scanf("%d",&student[man]n3);

printf("请输入添加人的成绩4:\n");

scanf("%d",&student[man]n4);

printf("请输入添加人的成绩5:\n");

scanf("%d",&student[man]n5);

printf("请输入添加人的成绩6:\n");

scanf("%d",&student[man]n6);

printf("请输入添加人的成绩7:\n");

scanf("%d",&student[man]n7);

printf("请输入添加人的成绩8:\n");

scanf("%d",&student[man]n8);

printf("请输入添加人的成绩9:\n");

scanf("%d",&student[man]n9);

student[man]zong=student[man]n1+student[man]n2+student[man]n3+student[man]n4+student[man]n5+student[man]n6+student[man]n7+student[man]n8+student[man]n9;

student[man]ping=student[man]zong/9;

man=man+1;

}

void alter(void)

{

int i;

char id[10];

printf("请输入要修改人的学号:\n");

scanf("%s",&id);

for(i=0;i<man;i++)

{

if(strcmp(student[i]id,id)==0)

{

j=i;

break;

}

j=-1;

}

if(j==-1)

{

printf("无此人\n");

}

else

{

printf("请输入要修改为的学号:\n");

scanf("%s",&student[j]id);

printf("请输入要修改为的姓名:\n");

scanf("%s",&student[j]name);

printf("请输入要修改为的成绩1:\n");

scanf("%d",&student[j]n1);

printf("请输入要修改为的成绩2:\n");

scanf("%d",&student[j]n2);

printf("请输入要修改为的成绩3:\n");

scanf("%d",&student[j]n3);

printf("请输入要修改为的成绩4:\n");

scanf("%d",&student[j]n4);

printf("请输入要修改为的成绩5:\n");

scanf("%d",&student[j]n5);

printf("请输入要修改为的成绩6:\n");

scanf("%d",&student[j]n6);

printf("请输入要修改为的成绩7:\n");

scanf("%d",&student[j]n7);

printf("请输入要修改为的成绩8:\n");

scanf("%d",&student[j]n8);

printf("请输入要修改为的成绩9:\n");

scanf("%d",&student[j]n9);

student[j]zong=student[j]n1+student[j]n2+student[j]n3+student[j]n4+student[j]n5+student[j]n6+student[j]n7+student[j]n8+student[j]n9;

student[j]ping=student[j]zong/9;

}

}

void deletes()

{

int i,k;

char id[10];

printf("请输入要删除人的学号:\n");

scanf("%s",&id);

for(i=0;i<man;i++)

{

if(strcmp(student[i]id,id)==0)

{

j=i;

break;

}

j=-1;

}

if(j==-1)

{

printf("无此人\n");

}

else

{

for(k=j;k<man;k++)

{

student[j]=student[j+1];

j=j+1;

}

man=man-1;

}

}

void menu(void)

{

int i;

printf("\n");

for(i=0;i<10;i++)

printf(" ");

for(i=0;i<60;i++)

printf("");

for(i=0;i<9;i++)

printf(" ");

printf("\n");

for(i=0;i<10;i++)

printf(" ");

printf("# 1显示学生成绩信息 6查询不及格学生信息 #\n");

for(i=0;i<10;i++)

printf(" ");

printf("# 2按成绩由高到低排序 7修改学生成绩信息 #\n");

for(i=0;i<10;i++)

printf(" ");

printf("# 3添加学生成绩信息 8读取文件 #\n");

for(i=0;i<10;i++)

printf(" ");

printf("# 4删除学生成绩信息 9保存文件 #\n");

for(i=0;i<10;i++)

printf(" ");

printf("# 5查询学生成绩信息 - 另存为 #\n");

for(i=0;i<10;i++)

printf(" ");

printf("# +退出 #\n");

for(i=0;i<10;i++)

printf(" ");

for(i=0;i<60;i++)

printf("");

for(i=0;i<9;i++)

printf(" ");

printf("\n");

}

int main(void)

{

char i;

read();

menu();

while(1)

{

printf("请输入要选择的需要功能的序列号(输入0显示菜单):\n");

scanf("%s",&i);

if(i=='1')

{

print();

}

else if(i=='2')

{

compositor();

print();

}

else if(i=='3')

{

raise();

print();

}

else if(i=='4')

{

deletes();

print();

}

else if(i=='5')

{

inquiry();

}

else if(i=='6')

{

fail();

}

else if(i=='7')

{

alter();

print();

}

else if(i=='8')

{

read();

}

else if(i=='9')

{

write();

}

else if(i=='0')

{

menu();

}

else if(i=='+')

{

break;

}

else if(i=='-')

{

save();

}

else

{

printf("无此功能,请重新输入序列号\n");

}

}

return 0;

}

记事本文件:你可以随意起名,但要放在和程序同目录

0615438101 顾佳 44 67 72 60 66 65 93 82 67

0615438103 金一宇 60 77 75 75 78 77 97 74 76

0615438104 李阳涛 50 76 66 73 74 80 92 89 74

0615438105 马凯 66 76 77 66 75 72 95 82 75

0615438106 史超 47 71 65 61 85 72 89 83 70

0615438108 徐磊 60 75 66 80 76 80 92 68 74

0615438109 杨浩 60 81 70 91 83 72 93 72 78

0615438110 于泽 61 75 78 70 87 73 84 92 77

0615438111 张昊 60 71 57 82 72 63 86 38 67

0615438112 张政 60 67 69 80 66 61 87 88 73

0615438114 周艨 61 69 71 38 74 77 76 89 67

0615438131 张楠 86 74 72 90 80 81 97 80 84

0615438132 王凡 29 68 48 35 46 76 88 62 54

喔~路过的,我也是初二开始的的确需要极大的耐心,还好当时我住校,也没别的事干,整天看书

一开始学的东西当然都是很简单的,无非就是记住它的规则,适应它的逻辑

C语言的书我不知道,别人都说谭浩强的那本不错,我倒是看过一点,隐约记得讲的挺详细,虽然我觉得很罗嗦,呵呵

我当时学的时候没有人教,有些不明白的地方就假设它是这样或那样的,然后看书上的例子,果真是这样,于是就认为,它就是这样,有的实在不能理解的就过去了,学了后面的,接触的多了,就理解了

嘿嘿,自学总会有困难,得要坚持才行不过你要是有什么不解最好找人问问,实在不行就试试我那招吧 囧

如果是按学习成绩来说,c等学生就是学习比较差的。但是形容一个人不能只靠他的学习成绩来判断,学习成绩差的不一定别的方面也差劲,可能人家还有意想不到的方面呢,而学习成绩好的,他们有些方面说不定还比不上学习成绩不好的人呢,所有评判一个学生还是从多方面入手,不要局限于一处。

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{

结构体所包含的变量或数组

};

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:

struct stu{

char name; //姓名

int num; //学号

int age; //年龄

char group; //所在学习小组

float score; //成绩

};

stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。

注意大括号后面的分号;不能少,这是一条完整的语句。

结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。

像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

结构体变量

既然结构体是一种数据类型,那么就可以用它来定义变量。例如:

struct stu stu1, stu2;

定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。

你也可以在定义结构体的同时定义结构体变量:

struct stu{

char name; //姓名

int num; //学号

int age; //年龄

char group; //所在学习小组

float score; //成绩

} stu1, stu2;

将变量放在结构体定义的最后即可。

如果只需要 stu1、stu2 两个变量,后面不需要再使用结构体名定义其他变量,那么在定义时也可以不给出结构体名,如下所示:

struct{ //没有写 stu

char name; //姓名

int num; //学号

int age; //年龄

char group; //所在学习小组

float score; //成绩

} stu1, stu2;

这样做书写简单,但是因为没有结构体名,后面就没法用该结构体定义新的变量。

理论上讲结构体的各个成员在内存中是连续存储的,和数组非常类似,例如上面的结构体变量 stu1、stu2 的内存分布如下图所示,共占用 4+4+4+1+4 = 17 个字节。

但是在编译器的具体实现中,各个成员之间可能会存在缝隙,对于 stu1、stu2,成员变量 group 和 score 之间就存在 3 个字节的空白填充(见下图)。这样算来,stu1、stu2 其实占用了 17 + 3 = 20 个字节。

关于成员变量之间存在“裂缝”的原因,我们将在《C语言和内存》专题中的《C语言内存对齐,提高寻址效率》一节中详细讲解。

成员的获取和赋值

结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号获取单个成员。获取结构体成员的一般格式为:

结构体变量名成员名;

通过这种方式可以获取成员的值,也可以给成员赋值:

#include <stdioh>

int main(){

struct{

char name; //姓名

int num; //学号

int age; //年龄

char group; //所在小组

float score; //成绩

} stu1;

//给结构体成员赋值

stu1name = "Tom";

stu1num = 12;

stu1age = 18;

stu1group = 'A';

stu1score = 1365;

//读取结构体成员的值

printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%1f!\n", stu1name, stu1num, stu1age, stu1group, stu1score);

return 0;

}

运行结果:

Tom的学号是12,年龄是18,在A组,今年的成绩是1365!

除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:

struct{

char name; //姓名

int num; //学号

int age; //年龄

char group; //所在小组

float score; //成绩

} stu1, stu2 = { "Tom", 12, 18, 'A', 1365 };

不过整体赋值仅限于定义结构体变量的时候,在使用过程中只能对成员逐一赋值,这和数组的赋值非常类似。

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/meirong/11783965.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-12-21
下一篇2023-12-21

发表评论

登录后才能评论

评论列表(0条)

    保存