用C语言设计一个学生成绩管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
struct stu
{
char id[8]
char name[8]
扩展资料:
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)
复杂类型关键字
struct:结构体声明。(K&R时期引入)
union:联合体声明。(K&R时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(K&R时期引入)
sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
参考资料来源:百度百科-c语言
这个问题我在这两天已经回答了好多次了呐~~直接把我回答其它朋友的COPY给你吧!
高二的时候,我自己写过。现在在学其它的语言,就不献丑了,在网上给你找到了,是百度文库里面的,直接复制过来的话,排版不对,你自己去看一下吧,完整的代码。
http://wenku.baidu.com/view/43624a60f5335a8102d22056.html 名字就是《用C语言编写的一个学生信息管理系统》
PS:写这个,主要是用到C语言的链表,不难,只是有的时候,如果思路不清晰的话,容易写错,写漏等等,如果不参考上面,而是你自己写的话,建议先画个大概的树图出来,再开始编吧。
1. 输入记录。对每个学生的学号、姓名、班级、数学、英语、计算机成绩进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。
2. 维护记录。能够实现添加、删除、修改学生记录,但是一定要将最终数据存储到文件中。
3. 查询记录。根据班级、学号、科目等查询学生的成绩。如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。
4. 统计记录。完成对各门功课最高分和不及格人数的统计。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(Student)
typedef struct student
{
int num
char name[20]
int score[4]
int sum
struct student *next
}Student
int n
Student *cin(void)
Student *sort_1(Student *head,int)
void sort_2(Student *head)
void print(Student *head)
Student *sort_all(Student *head)
void find(Student *head)
Student *add_new(Student *head)
Student *cin()
{
int flag
Student *head,*p1,*p2
n=0
head=(Student *)malloc(LEN)
p2=head
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1)
scanf("%d",&flag)
while(getchar()!='\n')
for(flag)
{
n++
p1=(Student *)malloc(LEN)
p1->num=flag
printf("请输入第%d名学生的姓名:",n)
scanf("%s",p1->name)
printf("请输入第%d名学生的语文成绩:",n)
scanf("%d",&p1->score[0])
printf("请输入第%d名学生的数学成绩:",n)
scanf("%d",&p1->score[1])
printf("请输入第%d名学生的英语成绩:",n)
scanf("%d",&p1->score[2])
printf("请输入第%d名学生的计算机成绩:",n)
scanf("%d",&p1->score[3])
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3]
p2->next=p1
p2=p1
printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:",n+1)
scanf("%d",&flag)
}
p2->next=NULL
printf("\n\n")
return head
}
Student *sort_all(Student *head)
{
int choose
for()
{
printf("\n\t\t# # # # # 学生成绩统计排序 # # # #\n")
printf("\t\t#\t1.按学生学号排序\t #\n")
printf("\t\t#\t2.按学生总分排序\t #\n")
printf("\t\t#\t3.按学生语文成绩排序\t #\n")
printf("\t\t#\t4.按学生数学成绩排序\t #\n")
printf("\t\t#\t5.按学生英语成绩排序\t #\n")
printf("\t\t#\t6.按学生计算机成绩排序\t #\n")
printf("\t\t#\t7.单科高分及均分\t #\n")
printf("\t\t#\t8.显示当前学生成绩\t #\n")
printf("\t\t#\t0.返回上一级菜单\t #\n")
printf("\t\t# # # # # 由himpo友情提供# # # # #\n\n")
printf("请输入你要执行的操作:")
scanf("%d",&choose)
while(getchar()!='\n')
switch(choose)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:head=sort_1(head,choose)break
case 7:print(head)sort_2(head)break
case 8:print(head)break
case 0:return head
default: printf("\n\n您的输入有误!请重新输入:\n\n")break
}
}
}
Student *sort_1(Student *head,int choose)
{
Student *p1,*p2=head->next,*pm,*px
Student mid
if (!p2) return head
for(p1=p2p1->next!=NULLp1=p1->next)
{
pm=p1
for(p2=p1->nextp2!=NULLp2=p2->next)
switch(choose)
{
case 1:if (pm->num>p2->num) pm=p2break
case 2:if (pm->sum<p2->sum) pm=p2break
case 3:if (pm->score[0]<p2->score[0]) pm=p2break
case 4:if (pm->score[1]<p2->score[1]) pm=p2break
case 5:if (pm->score[2]<p2->score[2]) pm=p2break
case 6:if (pm->score[3]<p2->score[3]) pm=p2break
}
if (pm!=p1)
{
mid=*pm
*pm=*p1
*p1=mid
px=pm->next
pm->next=p1->next
p1->next=px
}
}
printf("\n排序后的成绩表为:\n")
print(head)
return head
}
void sort_2(Student *head)
{
Student *p=head->next
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4
int max_sum,min_sum
int sum_1=0,sum_2=0,sum_3=0,sum_4=0
float aver_1,aver_2,aver_3,aver_4,aver_sum
if (!p) return
max_1=min_1=p->score[0]max_2=min_2=p->score[1]
max_3=min_3=p->score[2]max_2=min_2=p->score[3]
max_sum=min_sum=p->sum
for(pp=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0]
else if (min_1>p->score[0]) min_1=p->score[0]
if (max_2<p->score[1]) max_2=p->score[1]
else if (min_2>p->score[1]) min_2=p->score[1]
if (max_3<p->score[2]) max_3=p->score[2]
else if (min_3>p->score[2]) min_3=p->score[2]
if (max_4<p->score[3]) max_4=p->score[3]
else if (min_4>p->score[3]) min_4=p->score[3]
if (max_sum<p->sum) max_sum=p->sum
else if (min_sum>p->sum) min_sum=p->sum
sum_1+=p->score[0]sum_2+=p->score[1]sum_3+=p->score[2]sum_4+=p->score[3]
}
aver_1=1.0*sum_1/naver_2=1.0*sum_2/naver_3=1.0*sum_3/naver_4=1.0*sum_4/n
aver_sum=aver_1+aver_2+aver_3+aver_4
printf("总共%d名学生,具体数据为:\n",n)
printf("语文最高分为%d,最低分为%d,平均分为%.2f\n",max_1,min_1,aver_1)
printf("数学最高分为%d,最低分为%d,平均分为%.2f\n",max_2,min_2,aver_2)
printf("英语最高分为%d,最低分为%d,平均分为%.2f\n",max_3,min_3,aver_3)
printf("计算机最高分为%d,最低分为%d,平均分为%.2f\n",max_4,min_4,aver_4)
printf("总分最高分为%d,最低分位%d,平均分为%.2f\n",
max_sum,min_sum,aver_sum)
}
void find(Student *head)
{
Student *p
int choose,fnum
char tem[20]
if (n==0) {printf("\n当前系统没有任何学生数据,您就别费劲了!\n ")return}
for()
{
printf("\n请输入您要查询学生的方式:\n\n")
printf("1、按学号查询;2、按姓名查询;0、我不查询了。\n\n")
printf("请选择:")
scanf("%d",&choose)
while(getchar()!='\n')
if (choose==1)
{
printf("\n请输入你要查询的学生的学号,输入0退出学号查询:")
scanf("%d",&fnum)
for(fnum)
{
for(p=head->nextp!=NULL&&p->num!=fnump=p->next)
if (!p)
{
printf("\n\n找不到你要查询的学号,请重新输入,输入0表示结束:")
scanf("%d",&fnum)
}
else if (p->num==fnum)
{
printf("\n学号为%d学生的数据为:\n",p->num)
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机\
成绩 总分\n")
printf("%d\t%s\t %d%d%d %d \
%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum)
printf("\n\n请输入你还要查询的学生的学号,输入0表示不按学\
号查询了:")
scanf("%d",&fnum)
}
}
}
else if (choose==2)
{
printf("\n请输入你要查询的学生的姓名,输入0退出姓名查询:")
scanf("%s",tem)
for(strcmp(tem,"0"))
{
for(p=head->nextp!=NULL&&strcmp(p->name,tem)p=p->next)
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:")
scanf("%s",tem)
}
else if (!strcmp(p->name,tem))
{
printf("\n姓名为%s学生的数据为:\n",p->name)
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 \
计算机成绩 总分\n")
printf("%d\t%s\t %d%d%d \
%d%d\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],
p->score[3],p->sum)
printf("\n\n请输入你还要查询的学生的姓名,输入0表\
示不按姓名查询了:")
scanf("%s",tem)
}
}
}
else if (choose==0) {printf("\n你选择了不查询!\n")break}
else {printf("\n你以其他方式选择了不查询!\n")break}
}
}
Student *add_new(Student *head)
{
Student *p
int flag
printf("\n\n请输入你要新加入学生的学号,学号为0表示结束输入:")
scanf("%d",&flag)
while(getchar()!='\n')
for(flag)
{
p=(Student *)malloc(LEN)
p->num=flag
printf("请输入新加入学生的姓名:",n)
scanf("%s",p->name)
printf("请输入新加入学生的语文成绩:",n)
scanf("%d",&p->score[0])
printf("请输入新加入学生的数学成绩:",n)
scanf("%d",&p->score[1])
printf("请输入新加入学生的英语成绩:",n)
scanf("%d",&p->score[2])
printf("请输入第%d名学生的计算机成绩:",n)
scanf("%d",&p->score[3])
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]
p->next=head->next
head->next=p
n++
printf("\n请输入还要加入学生的学号,没有此学生则输入0表示结束:")
scanf("%d",&flag)
}
head=sort_1(head,1)
printf("加入后的成绩表为:\n")
print(head)
return head
}
void print(Student *head)
{
Student *p=head->next
if (!p) {printf("\n\n此系统目前没有任何学生数据!\n\n\n")return}
printf("此系统目前共计学生%d名:\n",n)
printf("**************************学生成绩统计一览************************\
*****\n")
printf("学号\t姓名\t语文成绩 数学成绩 英语成绩 计算机成绩 总分\n")
for(pp=p->next)
printf("%d\t%s\t %d%d%d %d%d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3])
printf("************************此软件由himpo友情提供*************************\
*\n\n")
}
int main()
{
Student *head
int choose,i
head=(Student *)malloc(LEN)
head->next=NULL
for()
{
printf("\n\t\t* * * * * 学生成绩管理系统 * * * *\n")
printf("\t\t*\t1.学生数据键盘录入\t *\n")
printf("\t\t*\t2.学生数据统计排序\t *\n")
printf("\t\t*\t3.查询学生数据\t\t *\n")
printf("\t\t*\t4.插入学生数据\t\t *\n")
printf("\t\t*\t5.显示当前成绩表\t *\n")
printf("\t\t*\t0.退出成绩管理系统\t *\n")
printf("\t\t* * * * * 由himpo友情提供* * * * *\n\n")
printf("\n请输入你要执行的操作:")
scanf("%d",&choose)
while(getchar()!='\n')
switch(choose)
{
case 1:printf("\n\t\t\t\t****注意****")
printf("\n\n此选项将会建立新的学生数据系统 ,原来的数据将\
不再存在,你确信要删除原来的数据并建立新的数据系统么?\n\n")
printf("1、建立新的数据系统;0、放弃建立新的数据系统。\n\n")
printf("请选择:")
scanf("%d",&i)
if (i==1) {head=cin()print(head)break}
else if (i==0)
{
printf("\n你选择了放弃建立新的数据系统!\n")
break
}
else {
printf("\n你做出别的选择,当作放弃建立!\n")
break
}
case 2:head=sort_all(head)break
case 3:find(head)break
case 4:head=add_new(head)
case 5:print(head)break
case 0:system("pause")return 0
default: printf("\n\n您的输入有误!请重新输入:\n\n")break
}
}
}
满意请采纳。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stud_node
{
int num
char name[20]
int score
struct stud_node *next
}
struct stud_node *Create_Stu_Doc()
struct stud_node *InsertDoc(struct stud_node *head,struct stud_node *stud)
struct stud_node *DeleteDoc(struct stud_node *head,int num)
void Print_Stu_Doc(struct stud_node *head)
int main(void)
{
struct stud_node *head,*p
int choice,num,score
char name[20]
int size=sizeof(struct stud_node)
do
{
printf("1:添加 2:插入 3:删除 4:打印 0:退出\n")
scanf("%d",&choice)
switch(choice)
{
case 1:head=Create_Stu_Doc()break
case 2:printf("请输入学号,姓名和成绩:\n")
scanf("%d%s%d",&num,name,&score)
p=(struct stud_node *)malloc(size)
p->num=num
strcpy(p->name,name)
p->score=score
head=InsertDoc(head,p)
break
case 3:
printf("请输入学号:\n")
scanf("%d",&num)
head=DeleteDoc(head,num)
break
case 4:
Print_Stu_Doc(head)
break
case 0:break
}
}while(choice!=0)
return 0
}
struct stud_node *Create_Stu_Doc()
{
struct stud_node *head,*p
int num,score
char name[20]
int size=sizeof(struct stud_node)
head=NULL
printf("请输入学号,姓名和成绩:\n")
scanf("%d%s%d",&num,name,&score)
while(num!=0)
{
p=(struct stud_node*)malloc(size)
p->num=num
strcpy(p->name,name)
p->score=score
head=InsertDoc(head,p)
scanf("%d%s%d",&num,name,&score)
}
return head
}
struct stud_node *InsertDoc(struct stud_node *head,struct stud_node *stud)
{
struct stud_node *ptr,*ptr1,*ptr2
ptr2=head
ptr=stud
if(head==NULL)
{
head=ptr
head->next=NULL
}
else
{
while((ptr->num>ptr2->num)&&(ptr2->next!=NULL))
{
ptr1=ptr2
ptr2=ptr2->next
}
if(ptr->num<=ptr2->num)
{
if(head==ptr2)
head=ptr
else ptr1->next=ptr
ptr->next=ptr2
}
else
{
ptr2->next=ptr
ptr->next=NULL
}
}
return head
}
struct stud_node *DeleteDoc(struct stud_node *head,int num)
{
struct stud_node *ptr1,*ptr2
while(head!=NULL &&head->num==num)
{
ptr2=head
head=head->next
free(ptr2)
}
if(head==NULL)
return NULL
ptr1=head
ptr2=head->next
while(ptr2!=NULL)
{
if(ptr2->num==num)
{
ptr1->next=ptr2->next
free(ptr2)
}
else
ptr1=ptr2
ptr2=ptr1->next
}
return head
}
void Print_Stu_Doc(struct stud_node *head)
{
struct stud_node *ptr
if(head==NULL)
{
printf("\nNo Records\n")
return
}
printf("\nThe Students' Records Are:\n")
printf("Num\tName Score\n")
for(ptr=headptrptr=ptr->next)
printf("%8d %20s %6d\n",ptr->num,ptr->name,ptr->score)
}
可以由类模板和数组写。
我说说类模板的吧。
定义一个Student类存放学生信息(姓名,初始排名,各科成绩,个人总分);
初始排名由输入顺序排,在计算名字的时候就可以通过冒泡排序。
在里面定义计算总分的函数。
下面定义一个Caozuo类,用学生链表的做。你可以去找下这个例子。
数组的就很简单了,你只要想想。先定义数组(姓名,成绩),总分就是个人每科成绩的和,下面5个函数都可以通过数组遍历实现。如
cout<<"请输入你要查询的学生的名字:"<<endl
cin>>n
for(int i=0i<=Maxsizei++)
{
if(Student[i].name==n)
Student[i].Print()
}
#include <iostream>
#include <fstream>
#include <string>
const char * file = "student.txt"
using namespace std
class Student
{
public:
int Num, Age, Maths, English, Cpp, Total, Rank
string Name
char Sex
void Set(int num, string name, char sex,int age, int english, int maths, int cpp)
{
Num =num
Name =name
Sex=sex
Age=age
English=english
Maths=maths
Cpp=cpp
Total=english+maths+cpp
}
void total()
{
cout <<"The score of " <<Name <<" in total is: "
<<Maths + English + Cpp <<endl
}
void ave()
{
cout <<"The score of " <<Name <<" in average is: "
<<(Maths + English + Cpp)/3.0 <<endl
}
void display()
{
//数字设置为右对齐
cout.setf(ios_base ::right, ios_base ::adjustfield)
cout.width(3)
cout <<Num <<" "
//字符串设置为左对齐
cout.setf(ios_base ::left, ios_base ::adjustfield)
cout.width(8)
cout <<Name
cout.width(4)
cout <<Sex
//数字设置为右对齐
cout.setf(ios_base ::right, ios_base ::adjustfield)
cout.width(3)
cout<<Age
cout.width(8)
cout <<English
cout.width(6)
cout<<Maths
cout.width(4)
cout <<Cpp
cout.width(6)
cout <<Total
}
int rank() //返回名次
{ return Rank}
}stu[5]
void getdatas()
void dis_age()
void dis_course()
void dis_ave()
void dis_total()
void openfile()
void callchoice()
void dis_all()
int main()
{
cout <<"1、输入学生信息并保存到文件"<<endl
<<"2、按年龄从大到小显示学生各项信息"<<endl
<<"3、按各门成绩由高到低显示学生信息"<<endl
<<"4、输入学号计算学生平均成绩并显示"<<endl
<<"5、输入学号计算学生总成绩并显示"<<endl
<<"6、按学生总成绩排名并显示排名结果"<<endl
<<"请选择(1-6)" <<endl
callchoice()
return 0
}
void callchoice()
{
cout <<"\nPress 1-6 to select your choice, and any character to terminate:_\b"
int choice
while(cin >>choice)
{
switch (choice)
{
case 1 : getdatas() callchoice()break //接受输入并存至文件
case 2 : dis_age() callchoice()break //按年龄显示
case 3 : dis_course()callchoice()break //按单科成绩排名并显示
case 4 : dis_ave() callchoice()break //显示某位学生的平均分
case 5 : dis_total()callchoice()break //显示某位学生的总分
case 6 : dis_all() callchoice()break //按总分排名并显示
default : cout <<"Wrong input, select again: "
}
cin >>choice
}
}
void openfile() //打开文件,并将信息复制到类成员中
{
ifstream fin(file, ios_base::in | ios_base::binary)
if(fin.is_open())
for (int i=0i<5 i++)
{
int num, age, english, maths, cpp
char sex
string name
fin >>num>>name >>sex >>age >>english >>maths >>cpp
stu[i].Set(num, name, sex, age, english, maths, cpp)
}
else cout <<"The file could not be open." <<endl
fin.close()
}
void getdatas() //接受输入,并将信息存入文件中
{
ofstream fout(file, ios::out | ios::trunc |ios_base::binary)
if(fout.is_open())
{
cout <<"Num\tName\tSex\tAge\tEnglish\tMaths\tCpp\t\n"
for (int i=0i<5 i++)
{
cin >>stu[i].Num >>stu[i].Name >>stu[i].Sex >>stu[i].Age
>>stu[i].English >>stu[i].Maths >>stu[i].Cpp
fout <<stu[i].Num <<" "<<stu[i].Name <<" " <<stu[i].Sex <<" "<<stu[i].Age<<" "
<<stu[i].English <<" "<<stu[i].Maths <<" " <<stu[i].Cpp <<" "
}
}
else cout <<"The file could not be open." <<endl
cout <<"The data has been writen in the flie " <<file <<endl
fout.close()
}
void dis_age() //按年龄大小排名,并显示成绩表
{
openfile()
Student temp
for (int i=0i<5i++)
{
for (int j=i+1j<6j++)
{
if(stu[i].Age <stu[j].Age)
{
temp = stu[i]
stu[i] = stu[j]
stu[j] = temp
}
}
}
cout <<"N0. NameSex Age English Maths C++ Total\n"
for (int i=0i<5i++)
{ stu[i].display()cout <<endl}
}
void dis_course() //按单科成绩排名,并显示成绩表
{
openfile()
cout <<"Select a course(E for english,M for Maths, C for C++):_\b"
char sel
cin >>sel
while (sel!='e' &&sel!='E' &&sel!='m' &&sel!='M' &&sel!='c' &&sel!='C')
{
cout <<"Not a right choice, input again:_\b"
cin >>sel
}
Student temp
for (int i=0i<4i++)
{
for (int j=i+1j<5j++)
{
if (sel == 'e' or sel=='E')
{
if(stu[i].English <stu[j].English)
{
temp = stu[i]
stu[i] = stu[j]
stu[j] = temp
}
}
else if (sel == 'm' or sel=='M')
{
if(stu[i].Maths <stu[j].Maths)
{
temp = stu[i]
stu[i] = stu[j]
stu[j] = temp
}
}
else if (sel == 'c' or sel=='C')
{
if(stu[i].Cpp <stu[j].Cpp)
{
temp = stu[i]
stu[i] = stu[j]
stu[j] = temp
}
}
}
}
cout <<"N0. NameSex Age English Maths C++ Total\n"
for (int i=0i<5i++)
{ stu[i].display()cout <<endl}
}
void dis_total() //显示某位学生的总成绩
{
openfile()
cout <<"Input the number of a student:__\b\b"
int choice
cin >>choice
for (int i=0i<5i++)
if (choice == stu[i].Num)
stu[i].total()
}
void dis_ave() //显示某位学生的平均分
{
openfile()
cout <<"Input the number of a student:__\b\b"
int choice
cin >>choice
for (int i=0i<5i++)
if (choice == stu[i].Num)
stu[i].ave()
}
void dis_all() //按部分多少排名,并显示成绩表
{
openfile()
Student temp
for (int i=0i<5i++)
{
for (int j=i+1j<6j++)
{
if(stu[i].Total <stu[j].Total)
{
temp = stu[i]
stu[i] = stu[j]
stu[j] = temp
}
}
}
for (int i=0i<5i++)
{
stu[i].Rank=i+1
}
cout <<"N0. NameSex Age English Maths C++ Total Rank\n"
for (int i=0i<5i++)
{
stu[i].display()
cout.width(5)
cout <<stu[i].rank() <<endl
}
}
总体设计
一、 仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)
1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。
2、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3、插入模块:可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。
4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
二、系统主模块结构图:
详细设计
一、 界面设计
此系统界面采用图形和数字化菜单设计。
主界面设计如下:
学生成绩管理系统
请选择相应的数字执行相应的功能:
1:是否输入其他数据
2:查看数据
3:插入数据
4:查找数据
5:更新数据
6:保留数据
7:显示或打印数据
8:语文成绩状况
9:数学成绩状况
10:英语成绩状况
11:计算机成绩状况
12:?
13:退出系统
二、 数据结构设计:
程序设计中用到的结构体类型:
学生信息结构体类型:
typedef struct student{
char name[MAX]
int num[MAX]
char sex[MAX]
int chinese
int mathematic
int english
int computer
struct student *next
}
程序代码:
//原始密码是123456
#include"stdio.h"
#include"stddef.h"
#include"stddef.h"
#include"string.h"
#define MAX 10
typedef struct student{
char name[MAX]
int num[MAX]
char sex[MAX]
int chinese
int mathematic
int english
int computer
struct student *next
}stu
stu *head
void print()
{
system("cls")
printf("\t\t\tScore Manage System\n")
printf("<1>Enter Record\t")
printf("<2>Display\t")
printf("<3>Insert\t")
printf("<4>Quest\t")
printf("<5>Update\t")
printf("<6>Save\t")
printf("<7>Fresh\t")
printf("<8>Chinese Average\t")
printf("<9>Math Average\t")
printf("<10>English Average\t")
printf("<11>Computer Average\t")
printf("<12>Quit\t\n")
}
void cin(stu *p1)
{ printf("Enter name:\n")
scanf("%s",&p1->name)
printf("Enter num:\n")
scanf("%d",&p1->num)
printf("Enter sex:\n")
scanf("%s",&p1->sex)
printf("Enter score:\n")
printf("Enter chinese:\n")
scanf("%d",&p1->chinese)
printf("Enter math:\n")
scanf("%d",&p1->mathematic)
printf("Enter English:\n")
scanf("%d",&p1->english)
printf("Enter Computer:\n")
scanf("%d",&p1->computer)
}
stu *cindata()
{ stu *p1,*p2
int i=1
char ch
p1=(stu *)malloc(sizeof(stu))
head=p1
while(i)
{
cin(p1)
printf("Do you Want to Continue?yes or no")
ch=getchar()
ch=getchar()
if(ch=='n'||ch=='N')
{ i=0
p1->next=NULL
}
else
{ p2=p1
p1=(stu *)malloc(sizeof(stu))
p2->next=p1
}
}
return(p1->next)
}
stu *lookdata(stu *p1)
{
while(p1!=NULL)
{ printf("Num:%d\t",p1->num)
printf("Name:%s\t",p1->name)
printf("Sex:%s\t",p1->sex)
printf("\n")
printf("Chinese:%d\t",p1->chinese)
printf("Math:%d\t",p1->mathematic)
printf("English:%d\t",p1->english)
printf("Computer:%d\t",p1->computer)
printf("\n")
p1=p1->next
}
return p1
}
void insert()
{ stu *p1,*p3,*p2
char ch
p1=head
p3=(stu *)malloc(sizeof(stu))
p3->next=NULL
if(head==NULL){ head=p3return}
cin(p3)
while(p1!=NULL&&(p1->num<p3->num))
{ p2=p1p1=p1->next}
if(p2==head) {p3->next=headhead=p3return}
p3->next=p1
p2->next=p3
}
find(stu *p2)
{ char name[20]
int b=0
printf("Enter the name of the student you want to find:")
scanf("%s",name)
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("The data you want has be found\n")
printf(" Name:%s\t",p2->name)
printf("Num:%d\t",p2->num)
printf("sex%s\t",p2->sex)
printf("\n")
printf("Chinese:%d\t",p2->chinese)
printf("Math:%d\t",p2->mathematic)
printf("English:%d\t",p2->english)
printf("Computer:%d\t",p2->computer)
printf("\n")
b=1
}
else if(b==0)
printf("sorry not find data!")
p2=p2->next
}
if(b==1)
{
print()
printf("Find one\n")}
else
{print()
printf("Not find\n")
}
}
void caverage()
{ stu *p1
int i
float max=0.0,min=200.0
float sum=0.0,aver=0
p1=head
if(p1==NULL)
printf("not data!")
else
{for(i=0p1!=NULLi++,p1=p1->next)
sum+=p1->chinese
aver=sum/i
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
{if(max<p1->chinese)
max=p1->chinese
}
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese
}
printf("Chinese Average:%f",aver)
printf("Chinese Max:%f",max)
printf("Chinese Min:%f",min)
}
void maverage()
{ stu *p1
int i
float max=0.0,min=200.0
float sum=0.0,aver=0
p1=head
if(p1==NULL)
printf("not data!")
else
{for(i=0p1!=NULLi++,p1=p1->next)
sum+=p1->mathematic
aver=sum/i
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
{if(max<p1->mathematic)
max=p1->mathematic
}
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic
}
printf("Mathe Average:%f",aver)
printf("Mathe Max:%f",max)
printf("Mathe Min:%f",min)
}
void eaverage()
{ stu *p1
int i
float max=0.0,min=200.0
float sum=0.0,aver=0
p1=head
if(p1==NULL)
printf("not data!")
else
{for(i=0p1!=NULLi++,p1=p1->next)
sum+=p1->english
aver=sum/i
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
{if(max<p1->english)
max=p1->english
}
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
if(min>p1->english)
min=p1->english
}
printf("English Average:%f",aver)
printf("English Max:%f",max)
printf("English Min:%f",min)
}
void comaverage()
{ stu *p1
int i
float max=0.0,min=200.0
float sum=0.0,aver=0
p1=head
if(p1==NULL)
printf("not data!")
else
{for(i=0p1!=NULLi++,p1=p1->next)
sum+=p1->computer
aver=sum/i
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
{if(max<p1->computer)
max=p1->computer
}
p1=head
for(i=0p1!=NULLi++,p1=p1->next)
if(min>p1->computer)
min=p1->computer
}
printf("Computer Average:%f",aver)
printf("Computer Max:%f",max)
printf("Computer Min:%f",min)
}
update(stu *p2)
{
char name[10]
int b=0
printf("Enter The Name")
scanf("%s",name)
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Find you data\n")
scanf("Name:%s",p2->name)
scanf("Num:%s",p2->num)
scanf("Sex:%s",p2->sex)
scanf("Chinese:%d",p2->chinese)
scanf("Math:%d",p2->mathematic)
scanf("english:%d",p2->english)
scanf("Computer:%d",p2->computer)
printf("Success!")
b=1}
else if(b==0)
printf("Sorry not Find data!")
p2=p2->next}
if(b==0)
{print()
printf("Sorry not Find data!")
}
else
{
print()
printf("Finish!")
}
}
save(stu *p2)
{
FILE *fp
char file[10]
printf("Enter file name")
scanf("%s",file)
fp=fopen(file,"w")
while(p2!=NULL)
{
fprintf(fp,"%s",p2->name)
fprintf(fp,"%s",p2->num)
fprintf(fp,"%s",p2->sex)
fprintf(fp,"%d",p2->chinese)
fprintf(fp,"%d",p2->mathematic)
fprintf(fp,"%d",p2->english)
fprintf(fp,"%d",p2->computer)
p2=p2->next
}
fclose(fp)
}
char password[7]="123456"
void main()
{ int choice
stu *p2
char s[8]
int flag=0,i
int n=3
do{ printf("Enter password:\n")
scanf("%s",s)
if(!strcmp(s,password))
{ printf("PASS\n\n\n")
flag=1
break
}
else{
printf("Error Enter again:\n")
n--
}
}
while(n>0)
if(!flag)
{printf("you have Enter 3 times!")
exit(0)
}
printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n")
printf("\t\tWelcom to the Mis\n")
printf("Author:-----\tClass:------\tNum:------\n")
printf("Adress:HG\n")
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n")
printf("\t\tEnter OP:\n")
printf("\n\n\n\n")
printf("==============\t\t==============\n")
printf("==============\t\t==============\n")
printf("\t\tEnter the MIS yes or no\n")
scanf("%d",&choice)
if(choice=='n'||choice=='N')
exit(1)
print()
while(1)
{
printf("Enter choice:")
scanf("%d",&i)
if(i<1||i>13)
{
printf("Enter num from 1 to 13:\n")
exit(1)
}
switch(i)
{case 1:
p2=cindata()
break
case 2:
p2=lookdata(head)
break
case 3:
insert()
break
case 4:
find(head)
break
case 5:
update(head)
break
case 6:
save(head)
break
case 7:
print()
break
case 8:
caverage()
break
case 9:
maverage()
break
case 10:
eaverage()
break
case 11:
comaverage()
break
case 12:
case 13:
exit(1)
break
}
scanf("%d",&i)
}
}
#include<stdio.h>
int avgGrade(int a[50])
{
int i,sum=0,max=0,min=0
double avg=0.0
max=a[0]
min=a[0]
for(i=0i<50i++)
{
sum+=a[i]
if(a[i]>max)
max=a[i]
if(a[i]<min)
min=a[i]
}
avg=(double)sum/50
printf("平均成绩为%lf,最高成绩为%d,最低成绩为%d\n",avg,max,min)
return 0
}
int compositor(int a[50])
{
int i,j,n,temp=0
printf("请输入您要排序的方式(0:升序,1:降序):\n")
scanf("%d",&n)
for(i=0i<50i++)
{
for(j=0j<ij++)
{
if(n==0)
{
if(a[j]>a[i])
{
temp=a[i]
a[i]=a[j]
a[j]=temp
}
}
else
{
if(a[j]<a[i])
{
temp=a[i]
a[i]=a[j]
a[j]=temp
}
}
}
}
for(i=0i<50i++)
{
printf("%d",a[i])
}
}
int insertGrade(int a[50])
{
int i,n
printf("请输入你要插入的成绩:\n")
scanf("%d",&n)
for(i=0i<50i++)
if(n>a[i])
{
for(s=49s>=is--)
a[s+1]=a[s]
break
}
a[i]=n
}
int deleteGrade(int a[50])
{
int x,i,j
printf("请输入你要删除的成绩:\n")
scanf("%d",&x)
for(i=0i<10i++)
{
if(a[i]==x)
for(j=i+1j<10j++)
a[i]=a[j]
a[j]='\0'
}
}
void main()
{
int n,i,a[50]
printf("请输入50个学生的成绩:\n")
for(i=0i<50i++)
{
scanf("%d",&a[i])
}
while(1)
{
printf ("--------------------------\n")
printf ("请选择您的功能:\n\n")
printf (" 0 录入成绩\n")
printf (" 1 输出成绩\n")
printf (" 2 输出平均分、最高分、最低分\n")
printf (" 3 成绩降序或升序排列\n")
printf (" 4 插入一个成绩\n")
printf (" 5 删除用户给定的成绩\n")
printf (" 6 退出\n\n")
printf ("--------------------------\n")
scanf("%d",n)
switch(n)
{
case 0:
printf("请输入50个学生的成绩:\n")
for(i=0i<50i++)
{
scanf("%d",&a[i])
}
break
case 1:
for(i=0i<50i++)
{
printf("%d",a[i])
}
break
case 2:
avgGrade(a)
break
case 3:
compositor(a)
break
case 4:
insertGrade(a)
break
case 5:
deleteGrade(a)
break
case 6:
exit (0)
}
}
return 0
}