C语言课设—学生成绩系统-程序1(仅供参考)
第一次弄这东西,不足之处还望各位理解、指出。
在此龙无痕谢谢大家(抱拳)
还请大家多多支持(∩_∩)
#主要的功能:
1.学生信息的录入。(逐一录入学生的学号、姓名、语数英成绩)
2.学生信息的查询。(通过学号单查询与全部查询)
3.学生信息的更改。(通过学号查询更改)
4.学生信息的删除。
5.以上的功能的数据存放在文件中。
界面效果过下:其他内容大家可以试试
/*微信公众号:IT小菜鸟龙无痕/QQ(龙无痕):1365149109
出品,码字不容易,还请多多支持(在此谢过)*/
#include <stdio.h>
#include <stdlib.h>
/*定义学生结构体*/
typedef struct
{
char ID[20]; //学号
char Name[20]; //姓名
float Chinese; //语文成绩
float Math; //数学成绩
float English; //英语成绩
}Student;
/*声明函数*/
void InputStudent(); //录入学生信息
void PrintStudent(); //查询学生信息
void Student_DisplaySingle(); //显示单条学生信息
void Student_Display(); //显示全部学生信息
void ChangeStudent(); //更改学生信息
void Student_DisplaySingle_(int index); //显示单条学生信息2
void DeleteStudent(); //删除学生信息
void IO_ReadInfo(); //将学生信息从文件中读出
void IO_WriteInfo(); //将学生信息写入文件
int Student_SearchByIndex(char id[]); //通过学号返回数组下标
/*声明学生数组及学生数量*/
Student students[1000];
int num=0;
/***********主程序*********/
int main()
{
int choose;
IO_ReadInfo(); //读取文件
while(1)
{
printf("*****学生成绩管理系统*****\n\n");
printf("1.学生成绩信息录入\n");
printf("2.学生成绩信息查询\n");
printf("3.学生成绩信息更改\n");
printf("4.学生成绩信息删除\n");
printf("0.退出\n\n");
printf("**************************\n");
printf("请选择<0~4>:");
scanf("%d",&choose);
getchar();
switch (choose)
{
case 1://1.录入学生信息
system("cls");//清屏
InputStudent();
break;
case 2://2.查询学生信息
system("cls");
PrintStudent();
break;
case 3://3.更改学生信息
system("cls");
ChangeStudent();
break;
case 4://4.删除学生信息
system("cls");
DeleteStudent();
break;
case 0://0.退出系统
exit(0);
break;
default://提示输入不符合要求的输入
printf("输入有误,没有该功能,请重新输入!\n\n");
system("pause"); //暂停,按任意键返回
system("cls");
break;
}
IO_WriteInfo(); //写入文件
}
}
/*将学生信息从文件(d:\\1.txt)中读出*/
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("d:\\1.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(Student),1,fp);
}
}
fclose(fp);
}
/****1、录入学生记录*****/
void InputStudent()
{
while(1)
{
printf("请输入学号:");
scanf("%s",&students[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("请输入语文成绩:");
scanf("%f",&students[num].Chinese);
getchar();
printf("请输入数学成绩:");
scanf("%f",&students[num].Math);
getchar();
printf("请输入英语成绩:");
scanf("%f",&students[num].English);
getchar();
num++;
printf("是否继续?,继续请按任意键,否则输入n:");
if (getchar()=='n')
{
printf("录入成功!\n");
system("pause");
system("cls");
break;
}
}
}
/****2、查询学生信息******/
void PrintStudent()
{
while(1)
{
char index;
printf("1.单条信息查询\n");
printf("2.全部信息查询\n");
printf("0.退出\n");
printf("请输入查询方式(0~2):");
scanf("%d",&index);
getchar();
if (index==0)
{
system("pause");
system("cls");
break;
}
else
{
switch(index)
{
case 1:
system("cls");
Student_DisplaySingle();
system("cls");
break;
case 2:
Student_Display();
system("pause");
system("cls");
break;
default:
printf("输入有误,没有该功能,请重新输入!\n\n");
system("pause");
system("cls");
}
}
}
}
/*通过学号返回数组下标*/
int Student_SearchByIndex(char id[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].ID,id)==0)
{
return i;
}
}
return -1;
}
/*显示单条学生记录*/
void Student_DisplaySingle()
{
while(1)
{
char id[20];
int index;
printf("请输入要查询的学生的学号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf("学生不存在!\n");
}
else
{
printf("你要查询的学生信息为:\n");
printf(" 学号 姓名 语文成绩 数学成绩 英语成绩\n");
printf("-------------------------------------------------------------\n");
printf("%10s%8s %8.2f %8.2f %8.2f\n",students[index].ID,students[index].Name,students[index].Chinese,students[index].Math,students[index].English);
}
printf("是否继续?,继续请按任意键,否则输入n:");
if (getchar()=='n')
{
system("cls");
break;
}
}
}
/*显示全部学生信息*/
void Student_Display()
{
int i;
printf(" 学号 姓名 语文成绩 数学成绩 英语成绩\n");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
{
printf("%10s%8s %8.2f %8.2f %8.2f\n",students[i].ID,students[i].Name,students[i].Chinese,students[i].Math,students[i].English);
}
}
/******3、更改学生信息**********/
void ChangeStudent()
{
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].Chinese);
getchar();
printf("请输入数学成绩:");
scanf("%f",&students[index].Math);
getchar();
printf("请输入英语成绩:");
scanf("%f",&students[index].English);
getchar();
}
printf("是否继续?,继续请按任意键,否则输入n:");
if (getchar()=='n')
{
printf("更改成功!\n");
system("pause");
system("cls");
break;
}
}
}
/*显示单条学生记录*/
void Student_DisplaySingle_(int index)
{
printf(" 学号 姓名 语文成绩 数学成绩 英语成绩\n");
printf("-------------------------------------------------------------\n");
printf("%10s%8s %8.2f %8.2f% 8.2f\n",students[index].ID,students[index].Name,students[index].Chinese,students[index].Math,students[index].English);
}
/****4、删除学生信息****/
void DeleteStudent()
{
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,否则任意键:");
if (getchar()=='y')
{
for (i=index;i<num-1;i++)
{
students[i]=students[i+1];//把后边的对象都向前移动
}
num--;
printf("已删除!\n");
getchar();
}
else
{
getchar();
printf("已取消!\n");
}
}
printf("是否继续删除?,继续请按任意键,否则输入n:");
if (getchar()=='n')
{
printf("已保存!\n");
system("pause");
system("cls");
break;
}
}
}
/*将学生信息写入文件(d:\\1.txt)*/
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("d:\\1.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(Student),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}