C语言实训

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实训相关的知识,希望对你有一定的参考价值。

成绩管理系统
[问题描述]学生信息包括:学号、姓名、班级及各门课
[基本要求]程序功能:录入,插入,删除,修改,查询,排序,统计等。
[实现提示]将学生信息定义成结构体类型,形成线性表,可按顺序存储或链式存储方式存储,实现以上功能。
高手快来帮帮忙啊!!

/*8、学生成绩管理系统
学生属性:学号,姓名,入学年月,有成绩的学期数,四门课的成绩等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.1212..12都是合法的实型常量。

二、指数形式

在C语言中,以"e"或"E"后跟一个整数来表示以10为底的幂数。如:2.306可以表示为0.2306E12.306e023.06e-1。C语言语法规定:

字母e或E之前必须要有数字,且e或E后面的指数必须为整数。

注意:在字母e或E的前后以及数字之间不得插入空格。

以上是关于C语言实训的主要内容,如果未能解决你的问题,请参考以下文章

C语言实训指导

c语言实验报告心得

C语言实型常数

C语言实型常量

C语言实型常量

C语言实型常量