C语言实训
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实训相关的知识,希望对你有一定的参考价值。
成绩管理系统
[问题描述]学生信息包括:学号、姓名、班级及各门课
[基本要求]程序功能:录入,插入,删除,修改,查询,排序,统计等。
[实现提示]将学生信息定义成结构体类型,形成线性表,可按顺序存储或链式存储方式存储,实现以上功能。
高手快来帮帮忙啊!!
学生属性:学号,姓名,入学年月,有成绩的学期数,四门课的成绩等9个成员,
在编程中要求当执行状态输入i为输入学生记录,输入D为删除,输入s为查询(以学号为查询条件,输入p为将整个学生记录输出,使用结构数组或结构指针编程)
*/
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
int stu_num=0; //全局变量,已输入成绩的学生人数
struct student //结构体数组,用于储存学生的数据
char num[11]; //储存学号
char name[11]; //储存名字
char sex[3]; //储存性别
char date[11]; //储存入学年月
int term; //储存学期数
float score1; //储存成绩1
float score2; //储存成绩2
float score3; //储存成绩3
float score4; //储存成绩4
student[100];
void warning() //警告函数
char a;
printf("您所查找的学生暂无数据,按任意键返回重新输入");
a=getch(); //储存任意键
void input() //输入函数
char a;
do
system("cls");
printf("(i)输入学生数据\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='i'||a=='I') //输入学生数据
system("cls"); //清屏函数
printf("下面输入第%d个学生的数据\n学号:",stu_num+1); //以下操作储存学生数据于结构体中
scanf("%s",&student[stu_num].num);
printf("姓名:");
scanf("%s",&student[stu_num].name);
printf("性别:");
scanf("%s",&student[stu_num].sex);
printf("入学年月:");
scanf("%s",&student[stu_num].date);
printf("学期:");
scanf("%d",&student[stu_num].term);
printf("成绩1:");
scanf("%f",&student[stu_num].score1);
printf("成绩2:");
scanf("%f",&student[stu_num].score2);
printf("成绩3:");
scanf("%f",&student[stu_num].score3);
printf("成绩4:");
scanf("%f",&student[stu_num].score4);
stu_num++;
if(a=='e'||a=='E') //退出输入函数
break; //强制结束循环以退出输入函数
while(1);
void output() //输出函数
system("cls"); //清屏函数
int i,j;
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
for(i=0;i<stu_num;i++) //通过for语句逐个输出学生数据
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("按任意键返回主菜单");
j=getch(); //储存任意键
void revise() //修改函数
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找修改\n(m)按名字查找修改\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
if(strcmp(num,student[i].num)==0)
break; //找到后结束循环
else if(a=='m'||a=='M') //按姓名查找
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
if(strcmp(name,student[i].name)==0)
break; //找到后结束循环
else if(a=='e'||a=='E') //退出修改函数
return;
else //为了防止选错选项
goto st;
if(i==stu_num) //未找到学生数据时提示警告并重新查找
warning();
goto st;
system("cls");
printf("您要更改的学生的信息为:\n"); //输出欲修改的学生信息
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("请更新该学生的数据\n学号:"); //找到后进行数据更新
scanf("%s",&student[i].num);
printf("姓名:");
scanf("%s",&student[i].name);
printf("性别:");
scanf("%s",&student[i].sex);
printf("入学年月:");
scanf("%s",&student[i].date);
printf("学期:");
scanf("%d",&student[i].term);
printf("成绩1:");
scanf("%f",&student[i].score1);
printf("成绩2:");
scanf("%f",&student[i].score2);
printf("成绩3:");
scanf("%f",&student[i].score3);
printf("成绩4:");
scanf("%f",&student[i].score4);
printf("该学生数据已修改,按任意键返回");
a=getch(); //储存任意键
void search() //查询函数
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找\n(m)按名字查找\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
if(strcmp(num,student[i].num)==0)
break; //找到后结束循环
else if(a=='m'||a=='M') //按姓名查找
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
if(strcmp(name,student[i].name)==0)
break; //找到后结束循环
else if(a=='e'||a=='E') //退出查询函数
return;
else //为了防止选错选项
goto st;
if(i==stu_num) //未找到学生数据时提示警告并重新查找
warning();
goto st;
printf("学号\t 姓名 性别 入学年月 学期 成绩1 成绩2 成绩3 成绩4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("按任意键返回主菜单");
a=getch();
void del() //删除函数
int i=0,j;
char a,num[11],name[11];
st: system("cls"); //清屏函数
printf("(x)按学号查找删除\n(m)按名字查找删除\n(e)返回主菜单\n请输入您要执行的选项:");
a=getch(); //获取输入选项
if(a=='x'||a=='X') //按学号查找
printf("请输入该学生学号:");
scanf("%s",&num); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
if(strcmp(num,student[i].num)==0)
break; //找到后结束循环
else if(a=='m'||a=='M') //按姓名查找
printf("请输入该学生姓名:");
scanf("%s",&name); //输入查找数据并用for语句进行逐个对比
for(i=0;i<stu_num;i++)
if(strcmp(name,student[i].name)==0)
break; //找到后结束循环
else if(a=='e'||a=='E') //退出删除函数
return;
else
goto st; //为了防止选错选项
if(i==stu_num) //未找到学生数据时提示警告并重新查找
warning();
goto st;
for(j=i;j<stu_num;j++) //通过for语句进行数据覆盖实现删除学生数据
student[j]=student[j+1];
stu_num-=1;
printf("该学生数据已删除,按任意键返回主菜单");
a=getch();
void menu() //目录函数
do
char a;
st: system("cls"); //清屏函数
printf("\t\t 欢迎使用学生成绩管理系统 1.22版\n\n\n\t\t\t(i)输入学生数据\n\n\t\t\t(d)删除学生数据\n\n\t\t\t(o)查看学生数据\n\n\t\t\t(s)查询学生数据\n\n\t\t\t(r)修改学生数据\n\n\t\t\t(e)退出系统\n\n\n请输入您要执行的选项:"); //主菜单
a=getch(); //获取输入选项
switch(a)
case 'i': //进入输入函数
case 'I':
input();
break;
case 'o': //进入输出函数
case 'O':
output();
break;
case 'r': //进入修改函数
case 'R':
revise();
break;
case 'd': //进入删除函数
case 'D':
del();
break;
case 's': //进入查找函数
case 'S':
search();
break;
case 'e': //退出程序
case 'E':
return;
default: //为了防止选错选项
goto st;
while(1);
void main()
printf("组员:\n李东海 陈志锐\n凌华富 林继其\n杜德伟 钟鹏珲\n\n\n\n\t\t请稍后……"); //鸣谢栏
Sleep(7000);
menu();
这个是我们几个人做的期末作业,你可以拿去参考;如果windows函数不能用,就把他删除掉还有sleep这个也一起删除掉。
参考资料:自己想出来的
参考技术A MMMMMMMMMBVt:+..,IVXVYIBttt+::+IVVMMMMMMRR:‘
,YYVYItMYti+i++:X+Rt:tXWRMR,
.YRiIYRMViitVXRWRYMI++++itMM..
.Y+,.,X::,,,YMMMMMMMMRVItXMti
:X+:,X:,. .,iiIRMWMMMBBRMMBY.
tR+:I:i:+Y:IitYVYMMMMMMMMRi.
.+RXt:,::.::XXIBMMMMMMMMM+:
,RRXitY+,.::RWMMMMMMMMt.
VYI:::,..:tVMMMMMMBY+.
.VBBW:::::,i.MMMMMBi:.
.tWRRVi:::.X:VMMMMMMY.
,+i+:,XYtt+:,i:,MMMBR:
...VV..:..:.tt::++:+,RMYMV.
:M:::..:,.:,,,.+t+++Ytt.,+:
tRt:,.:,.:,:.:+.,:++tit,
:tXt:,:,:.:.,,+,:+YRY,
:++:::.,:.:.::+:iMi
,Ri:::,:::::::+Ii
,+:Xii:,,::I:tit,.
:BBt,:+::,::i+.
:BWXX::::::iX.
:BWVIi++t+:V+
WBXtItii+iWI.
:MWIYIti+iVRY,
RBXVYItiiIYXWI,
:MRWWVYttttIIXWt.
.XMBRRXIti++itIXW,
.BMBBRVIi+::+ttXX.
,MMBRXYti:::+tIW:
tMMRWYti+++ittXV
+MRVYti+++ittWI
.VMWVtiiiiiitIR,
.XBBWVttttttttXRv
.,WBRBXVtttttttIWt
:RWXWBXYtttttttYR:
.iRWVIiBWYIttttttYW,
.tWVYti:WRVIttittIVV .:,,
tWVIi++:XRVIIttttIXY ..:YYtYi:tittV,
tXYti+++tWRVYttittYWIiIYYVItt:iXW+....
:WIt+++iXRBBVYItitIYXXYti+iIYt++:IMRi:.
.:Xti+:+tRWt:BVYItitIYWVIIIYXXWXVXYt+i+IV:
.tYi+::IWI:::BVVItitIXBRVIt:::::::tIVXRiXt
:Viii++i:itIXBXVttitVW, tBIX
.XIiXIttIVRBRBIItttIRX :VX
.,tXXWWWVi+. RXXItiYRV ..
,BWYi+IRX
tBYiitWB,
.WVtiiIRI
VWtiiiIB,
,BIiiiiWt
.BViiiiYV
XXtii+YV
iRiii+YY
:Btii+XI
Wtii+R:
XY+t+B.
YX+tYR.
tX+iWV
iXi+RI
tYiIXX
,XtiIXRt.
:BIVYRWIV
+RYXXWiYR.
iWIVYtXMV
tBYItRtM+
XBWttX:B:
YYBXXYR:,R:
tIYYYIY: i: 参考技术B 很常规的题目 参考技术C #include "stdio.h"
/*定义学生结构体*/
struct Student
char ID[20];
char Name[20];
float Mark1;
float Mark2;
float Mark3;
float Average;
;
/*声明学生数组及学生数量*/
struct Student students[1000];
int num=0;
/*求平均值*/
float Avg(struct Student stu)
return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
/*通过学号返回数组下标*/
int Student_SearchByIndex(char id[])
int i;
for (i=0;i<num;i++)
if (strcmp(students[i].ID,id)==0)
return i;
return -1;
/*通过姓名返回数组下标*/
int Student_SearchByName(char name[])
int i;
for (i=0;i<num;i++)
if (strcmp(students[i].Name,name)==0)
return i;
return -1;
/*显示单条学生记录*/
void Student_DisplaySingle(int index)
printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
/*插入学生信息*/
void Student_Insert()
while(1)
printf("请输入学号:");
scanf("%s",&students[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("请输入成绩:");
scanf("%f",&students[num].Mark1);
getchar();
printf("请输入成绩:");
scanf("%f",&students[num].Mark2);
getchar();
printf("请输入成绩:");
scanf("%f",&students[num].Mark3);
getchar();
students[num].Average=Avg(students[num]);
num++;
printf("是否继续?(y/n)");
if (getchar()=='n')
break;
/*修改学生信息*/
void Student_Modify()
float mark1,mark2,mark3;
while(1)
char id[20];
int index;
printf("请输入要修改的学生的学号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
printf("学生不存在!\n");
else
printf("你要修改的学生信息为:\n");
Student_DisplaySingle(index);
printf("-- 请输入新值--\n");
printf("请输入学号:");
scanf("%s",&students[index].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[index].Name);
getchar();
printf("请输入成绩:");
scanf("%f",&students[index].Mark1);
getchar();
printf("请输入成绩:");
scanf("%f",&students[index].Mark2);
getchar();
printf("请输入成绩:");
scanf("%f",&students[index].Mark3);
getchar();
students[index].Average=Avg(students[index]);
printf("是否继续?(y/n)");
if (getchar()=='n')
break;
/*删除学生信息*/
void Student_Delete()
int i;
while(1)
char id[20];
int index;
printf("请输入要删除的学生的学号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
printf("学生不存在!\n");
else
printf("你要删除的学生信息为:\n");
Student_DisplaySingle(index);
printf("是否真的要删除?(y/n)");
if (getchar()=='y')
for (i=index;i<num-1;i++)
students[i]=students[i+1];
num--;
getchar();
printf("是否继续?(y/n)");
if (getchar()=='n')
break;
/*按姓名查询*/
void Student_Select()
while(1)
char name[20];
int index;
printf("请输入要查询的学生的姓名:");
scanf("%s",&name);
getchar();
index=Student_SearchByName(name);
if (index==-1)
printf("学生不存在!\n");
else
printf("你要查询的学生信息为:\n");
Student_DisplaySingle(index);
printf("是否继续?(y/n)");
if (getchar()=='n')
break;
/*按平均值排序*/
void Student_SortByAverage()
int i,j;
struct Student tmp;
for (i=0;i<num;i++)
for (j=1;j<num-i;j++)
if (students[j-1].Average<students[j].Average)
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
/*显示学生信息*/
void Student_Display()
int i;
printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
/*将学生信息从文件读出*/
void IO_ReadInfo()
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
printf("不能打开文件!\n");
return;
if (fread(&num,sizeof(int),1,fp)!=1)
num=-1;
else
for(i=0;i<num;i++)
fread(&students[i],sizeof(struct Student),1,fp);
fclose(fp);
/*将学生信息写入文件*/
void IO_WriteInfo()
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
printf("不能打开文件!\n");
return;
if (fwrite(&num,sizeof(int),1,fp)!=1)
printf("写入文件错误!\n");
for (i=0;i<num;i++)
if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
printf("写入文件错误!\n");
fclose(fp);
/*主程序*/
main()
int choice;
IO_ReadInfo();
while(1)
/*主菜单*/
printf("\n------ 学生成绩管理系统------\n");
printf("1. 增加学生记录\n");
printf("2. 修改学生记录\n");
printf("3. 删除学生记录\n");
printf("4. 按姓名查询学生记录\n");
printf("5. 按平均成绩排序\n");
printf("6. 退出\n");
printf("请选择(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
case 1:
Student_Insert();
break;
case 2:
Student_Modify();
break;
case 3:
Student_Delete();
break;
case 4:
Student_Select();
break;
case 5:
Student_SortByAverage();
Student_Display();
break;
case 6:
exit();
break;
IO_WriteInfo();
参考技术D 好麻烦。。
C语言实型常量
实型常量又称实数或浮点数。在C语言中可以用两种形式来表示一个实型常量。
一、小数形式
小数形式的实型常量由两部分组成:数字和小数点。如:0.12
、12.
、.12
都是合法的实型常量。
二、指数形式
在C语言中,以"e"或"E"后跟一个整数来表示以10为底的幂数。如:2.306可以表示为0.2306E1
、2.306e0
、23.06e-1
。C语言语法规定:
字母e或E之前必须要有数字,且e或E后面的指数必须为整数。
注意:在字母e或E的前后以及数字之间不得插入空格。
以上是关于C语言实训的主要内容,如果未能解决你的问题,请参考以下文章