**感觉自己将来要做程序员了,所以来CSDN把自己在学习过程中编的东西记录下来。
第一个程序是C语言实训的程序----学生成绩管理系统。**
Copyright ©Rushierer
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 60
typedef struct student
{
char num[10]; /*学号*/
char name[15]; /*姓名*/
int cgrade; /*C语言成绩*/
int mgrade; /*数学成绩*/
int egrade; /*英语成绩*/
int total; /*总分*/
float ave; /*平均分*/
int mingci; /*名次*/
}STUDENT;
typedef struct date
{
int n; /*统计数据个数*/
}DATE;
void showMenu(); /*仅显示菜单*/
void Menu(STUDENT stu[],int n,DATE date[]); /*显示主菜单*/
void showdate(STUDENT stu[],int n,DATE date[]); /*只显示数据*/
void inputRecorde(STUDENT stu[],int n,DATE date[]); /*从键盘输入数据*/
void displayRecord(STUDENT stu[],int n,DATE date[]); /*显示所有数据*/
void deleteRecorde(STUDENT stu[],int n,DATE date[]); /*删除数据*/
void searchRecorde(STUDENT stu[],int n,DATE date[]); /*查找数据*/
void numsearch(STUDENT stu[],int n,DATE date[]); /*按学号查找*/
void namesearch(STUDENT stu[],int n,DATE date[]); /*按姓名查找*/
void modifyRecorde(STUDENT stu[],int n,DATE date[]); /*修改数据*/
void insertRecorde(STUDENT stu[],int n,DATE date[]); /*插入数据*/
void sortRecorde(STUDENT stu[],int n,DATE date[]); /*排列数据*/
int main()
{
int choice;
STUDENT stu[N];
DATE date[1];
showMenu();
stu[0].total=0;
stu[0].ave=0;
printf("请输入选项(0~7):");
scanf("%d",&choice);
printf("\n");
if(choice==1)
{
printf("请输入要记录的学生人数:");
scanf("%d",&date[0].n);
}
else if(choice==0)
choice=0;
else
{
printf("当前没有记录的数据,请录入数据!\n");
printf("\n");
printf("请输入要录入的学生人数:");
scanf("%d",&date[0].n);
choice=1;
}
switch(choice)
{
case 1:
system("cls");
inputRecorde(stu,date[0].n,date);break;
case 0:
exit(0);break;
}
return 0;
}
/*显示主菜单Menu*/
void showMenu()
{
printf(" The Students'Grade Management System \n");
printf(" *********************Menu*********************\n");
printf(" * *\n");
printf(" * 1 input record 2 display record *\n");
printf(" * 3 delete record 4 search record *\n");
printf(" * 5 modify record 6 insert record *\n");
printf(" * 7 sort record 0 quit system *\n");
printf(" * *\n");
printf(" **********************************************\n");
}
/*显示菜单2*/
void Menu(STUDENT stu[],int n,DATE date[])
{
int choice;
showMenu();
printf("请输入选项(0~7):");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
inputRecorde(stu,n,date);break;
case 2:
system("cls");
displayRecord(stu,n,date);break;
case 3:
system("cls");
deleteRecorde(stu,n,date);break;
case 4:
system("cls");
searchRecorde(stu,n,date);break;
case 5:
system("cls");
modifyRecorde(stu,n,date);break;
case 6:
system("cls");
insertRecorde(stu,n,date);break;
case 7:
system("cls");
sortRecorde(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*从键盘输入成绩input*/
void inputRecorde(STUDENT stu[],int n,DATE date[])
{
int i=0,j;
system("cls");
printf(" Input record \n");
printf("*****************************************************\n");
printf("\n");
printf("数据录入格式提示:\n");
printf("1.数据内容:学号、姓名、c语言成绩、数学成绩、英语成绩\n");
printf("2.数据间以空格做间隔,最后回车录入数据结束\n");
printf("\n");
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的数据:",i+1);
scanf("%s",stu[i].num);
scanf("%s",stu[i].name);
scanf("%d",&stu[i].cgrade);
scanf("%d",&stu[i].mgrade);
scanf("%d",&stu[i].egrade);
}
printf("\n");
printf("数据录入完成!\n");
printf("\n");
printf("1查看录入的信息 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
displayRecord(stu,n,date);break;
case 2:
system("cls");
Menu(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*显示所有数据display*/
void displayRecord(STUDENT stu[],int n,DATE date[])
{
int i,j;
printf(" Display record \n");
printf("*****************************************************\n");
printf("所有数据:\n");
printf("\n");
printf(" 学号 姓名 c语言 数学 英语\n");
for(i=0;i<n;i++)
{
printf("%10s%15s%6d%7d%7d\n",stu[i].num,
stu[i].name,
stu[i].cgrade,
stu[i].mgrade,
stu[i].egrade);
}
printf("\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
Menu(stu,n,date);
}
else
exit(0);
}
/*只显示数据show*/
void showdate(STUDENT stu[],int n,DATE date[])
{
int i;
printf("已录入的数据:\n");
printf("\n");
printf(" 学号 姓名 c语言 数学 英语\n");
for(i=0;i<n;i++)
{
printf("%10s%15s%6d%7d%7d\n",stu[i].num,
stu[i].name,
stu[i].cgrade,
stu[i].mgrade,
stu[i].egrade);
}
}
/*删除记录delete*/
void deleteRecorde(STUDENT stu[],int n,DATE date[])
{
int i,k,j;
printf(" Delete record \n");
printf("*****************************************************\n");
printf("\n");
showdate(stu,n,date);
printf("已经录入%d个学生的信息,你想删除第几个的记录:",n);
scanf("%d",&k);
i=k-1;
for(;i<=n-2;i++)
{
strcpy(stu[i].num,stu[i+1].num);
strcpy(stu[i].name,stu[i+1].name);
stu[i].cgrade=stu[i+1].cgrade;
stu[i].mgrade=stu[i+1].mgrade;
stu[i].egrade=stu[i+1].egrade;
}
printf("\n");
printf("已成功删除!\n");
date[0].n=date[0].n-1;
n=n-1;
printf("\n");
printf("1显示修改后的信息 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
displayRecord(stu,n,date);break;
case 2:
system("cls");
Menu(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*查找功能search*/
void searchRecorde(STUDENT stu[],int n,DATE date[])
{
int k;
printf(" Search record \n");
printf("*****************************************************\n");
printf("\n");
printf("查找方式:1.按学号查找 2.按姓名查找\n");
printf("请选着查找方式(1/2):");
scanf("%d",&k);
printf("\n");
if(k==1)
{
numsearch(stu,n,date);
}
else
{
namesearch(stu,n,date);
}
}
/*按学号查找*/
void numsearch(STUDENT stu[],int n,DATE date[])
{
int i,j,k=0;
char num1[10];
printf("请输入想查找的学号:");
scanf("%s",num1);
printf("\n");
printf("查找结果:");
printf("\n");
for(i=0;i<n;i++)
{
if(strcmp(stu[i].num,num1)==0)
{
printf("%10s%15s%4d%4d%4d\n",stu[i].num,
stu[i].name,
stu[i].cgrade,
stu[i].mgrade,
stu[i].egrade);
k+=1;
}
}
if(k==0)
printf("输入的学号不存在或格式不对!\n");
printf("\n");
printf("1重新查询 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
searchRecorde(stu,n,date);break;
case 2:
system("cls");
Menu(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*按姓名查找*/
void namesearch(STUDENT stu[],int n,DATE date[])
{
int i,j,k=0;
char name1[15];
printf("请输入想查找的姓名:");
scanf("%s",name1);
printf("\n");
printf("查找结果:");
printf("\n");
for(i=0;i<n;i++)
{
if(strcmp(stu[i].name,name1)==0)
{
printf("%10s%15s%6d%7d%7d\n",stu[i].num,
stu[i].name,
stu[i].cgrade,
stu[i].mgrade,
stu[i].egrade);
k+=1;
}
}
if(k==0)
printf("输入的学号不存在或格式不对!\n");
printf("\n");
printf("1重新查询 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
system("cls");
searchRecorde(stu,n,date);break;
case 2:
system("cls");
Menu(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*修改记录modify*/
void modifyRecorde(STUDENT stu[],int n,DATE date[])
{
int i,k,j;
char num[10]; /*学号*/
char name[15]; /*姓名*/
int cgrade; /*C语言成绩*/
int mgrade; /*数学成绩*/
int egrade; /*英语成绩*/
printf(" Modify record \n");
printf("*****************************************************\n");
printf("\n");
showdate(stu,n,date);
printf("\n");
printf("已经录入%d个学生的信息,你想修改第几个学生的记录:",n);
scanf("%d",&k);
if(k>n||k<=0)
{
printf("\n");
printf("输入错误,无这条记录!\n");
printf("请重新输入你想修改第几个学生的记录:");
scanf("%d",&i);
k=i;
}
printf("\n");
printf("请输入修改后的信息:");
scanf("%s",num);
scanf("%s",name);
scanf("%d",&cgrade);
scanf("%d",&mgrade);
scanf("%d",&egrade);
strcpy(stu[k-1].num,num);
strcpy(stu[k-1].name,name);
stu[k-1].cgrade=cgrade;
stu[k-1].mgrade=mgrade;
stu[k-1].egrade=egrade;
printf("\n");
printf("修改完成!\n");
printf("\n");
printf("1显示修改后的信息 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
displayRecord(stu,n,date);break;
case 2:
system("cls");
Menu(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*插入数据insert*/
void insertRecorde(STUDENT stu[],int n,DATE date[])
{
int i,k,j;
char num[10]; /*学号*/
char name[15]; /*姓名*/
int cgrade; /*C语言成绩*/
int mgrade; /*数学成绩*/
int egrade; /*英语成绩*/
printf(" Insert record \n");
printf("*****************************************************\n");
printf("\n");
showdate(stu,n,date);
printf("\n");
printf("你想在第几个数据之后插入数据:");
scanf("%d",&k);
if(k>n||k<=0)
{
printf("\n");
printf("输入错误!\n");
printf("请重新输入你想在第几个数据之后插入数据:");
scanf("%d",&i);
k=i;
}
printf("\n");
printf("请输入插入的信息:");
scanf("%s",num);
scanf("%s",name);
scanf("%d",&cgrade);
scanf("%d",&mgrade);
scanf("%d",&egrade);
for(i=n;k+1<=i;i--);
{
strcpy(stu[i].num,stu[i-1].num);
strcpy(stu[i].name,stu[i-1].name);
stu[i].cgrade=stu[i-1].cgrade;
stu[i].mgrade=stu[i-1].mgrade;
stu[i].egrade=stu[i-1].egrade;
}
strcpy(stu[k].num,num);
strcpy(stu[k].name,name);
stu[k].cgrade=cgrade;
stu[k].mgrade=mgrade;
stu[k].egrade=egrade;
date[0].n=date[0].n+1;
n=n+1;
printf("\n");
printf("插入完成!\n");
printf("\n");
printf("1显示修改后的信息 2返回主菜单 0退出:");
scanf("%d",&j);
switch(j)
{
case 1:
printf("\n");
displayRecord(stu,n,date);break;
case 2:
system("cls");
Menu(stu,n,date);break;
case 0:
exit(0);break;
}
}
/*对数据排序sort*/
void sortRecorde(STUDENT stu[],int n,DATE date[])
{
int i,j;
STUDENT temp;
printf(" Sort record \n");
printf("*****************************************************\n");
printf("\n");
showdate(stu,n,date);
printf("\n");
printf("排序后的数据:\n");
for(i=0;i<n;i++)
{
stu[i].total=stu[i].cgrade+stu[i].mgrade+stu[i].egrade;
stu[i].ave=(float)stu[i].total/3;
}
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if(stu[i].total>stu[i+1].total)
{
temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
printf("\n");
printf(" 学号 姓名 c语言 数学 英语 平均分 总分 名次\n");
j=0;
for(i=n-1;i>-1;i--)
{
j++;
printf("%10s%15s%6d%7d%7d%8.2f%7d%7d\n",stu[i].num,
stu[i].name,
stu[i].cgrade,
stu[i].mgrade,
stu[i].egrade,
stu[i].ave,
stu[i].total,
j);
}
printf("\n");
printf("1返回主菜单 0退出:");
scanf("%d",&j);
if(j==1)
{
system("cls");
Menu(stu,n,date);
}
else
exit(0);
}
转载请咨询作者本人。