C语言课程设计:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char num[10];
char name[20];
float cyuyan;
float math;
float english;
float summ;
} STU;
STU per[200];
//该系统有九个功能函数构成,主要功能为对学生信息的增,删,查,改,排序以及自定义范围查看学生信息
void logon();//系统信息介绍页面
int menu_select();//主页面,为用户提供选项,使用户了解系统的功能
void add();// 增: 添加学生信息函数,用户可以输入学生信息,系统进行保存
void scan();// 查: 向用户展示所有的学生信息
void query();//查: 查询学生信息,可通过姓名活学号两种方式查询
void date();// 排序:用户可以选择某一课程对学生进行排名(高到底)
void amend();//改:用户可以输入学生学号来修改相关学生的信息
void delet();//删:输入学号删除相应的学生信息
void myself();//给定查看范围,函数展示成绩处于范围内的学生信息
int main(void)
{
int n=0;
logon();
for(;;)
{
switch(menu_select())
{
case 1:
printf("\t\t *^_^*学生记录添加 *^_^*\n");
add();
break;
case 2:
printf("\t\t *^_^*学生信息浏览 *^_^*\n");
scan();
break;
case 3:
printf("\t\t *^_^*学生信息查询 *^_^*\n");
query();
break;
case 4:
printf("\t\t *^_^*数据计算 *^_^*\n");
date();
break;
case 5:
printf("\t\t *^_^*数据修改 *^_^*\n");
amend();
break;
case 6:
printf("\t\t *^_^*数据删除 *^_^*\n");
delet();
break;
case 7:
printf("\t\t *^-^*自定义查询 *^-^*\n");
myself();
break;
case 0:
printf("\n\t\t谢谢您的使用,再见!^-^\n");
printf("\n\t\t");
system("pause");
exit(0);
}
}
system("pause");
return 0;
}
void logon()
//系统信息介绍
{
printf("\n\t\t\t 学生信息管理系统\n");
printf("\t\t\t 版本号:1.0\n");
printf("\t\t\t 20**年 *月 **日\n\n");
printf("\t\t\t ****专业\n");
printf("\t\t\t ****\n");
printf("\t\t\t 导演兼制作\n\n");
}
int menu_select()
//主页面,为用户提供选项,使用户了解系统的功能
//用户输入与展示功能对应的数字,系统进行相应的函数应答
{
int c;
for(int zhe=0;;)
{
printf("\t\t -----------------------------------\n");
printf("\t\t │ 【学生信息管理系统】 │\n");
printf("\t\t -----------------------------------\n");
printf("\t\t ******************************* \n");
printf("\t\t │ 1. 添加记录 2. 显示记录 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 3. 信息查询 4. 排序查看 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 5. 修改记录 6. 删除记录 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 7. 自定义查询 0. 退出程序 │\n");
printf("\t\t ******************************* \n");
printf("\t\t请您选择(0-7):");
scanf("%d", &c);
if(c<0||c>7)//如果不在给出范围之内则继续循环
continue;
else break;
}
return c;
}
void add()
//添加学生信息到文件中并进行保存
{
FILE *fp;
char sign = 'y';
int i=0,n=0;
system("cls");//清屏
STU p[200];
while(sign!='n'&&sign!='N')
{
printf(" ----学生纪录添加----\n");
printf("学号:\n");
scanf("\t%s",p[i].num);
printf("姓名:\n");
scanf("\t%s",p[i].name);
printf("C语言:\n");
scanf("\t%f",&p[i].cyuyan);
printf("高数: \n");
scanf("\t%f",&p[i].math);
printf("英语: \n");
scanf("\t%f",&p[i].english);
p[i].summ = p[i].cyuyan+p[i].english+p[i].math;
printf("是否继续添加?(y/n)");
scanf("\t%c",&sign);
i++;
n = n+1;
system("cls");
}system("pause");
if((fp=fopen("student.txt","a"))==NULL)
{
printf("抱歉,打开文件失败\n");
system("pause");
return ;
}
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %f %f %f %f\n",p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
}
fclose(fp);
system("pause");
}
void scan()
//查询所有学生信息
{
char sign = 'y';
FILE *fp;
int n;
system("cls");
if((fp = fopen("student.txt","r"))==NULL)
{
printf("打开文件失败!!\n");
system("pause");
return ;
}
int i=0;
while(fscanf(fp,"%s%s%f%f%f%f",per[i].num,per[i].name,&per[i].cyuyan,&per[i].math,&per[i].english,&per[i].summ)!=EOF)
{
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("学号 姓名 C语言 高数 英语 总分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("%s %s %.2f %.2f %.2f %.2f",per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
printf("\n");
i++;
}
system("pause");
system("cls");
}
void query()
//查询学生信息,有两种方式 1.按姓名查询 2.按学号查询
//用户输入查询学生的名字或学号就可以查询到该学生的相关信息
{
system("cls");
STU p[200];
FILE *fp1;
int i=0,n=0,m;
printf("\t\n请选择查询方式:\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名 │\n");
printf("\t│2------学号 │\n");
printf("\t│3------返回 │\n");
printf("\t└──────┘\n");
printf("请输入你要查询的方式\n");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3)
{
printf("输入错误,请重新查询\n");
getchar();
scanf("%d",&m);
}
if((fp1=fopen("student.txt","r"))==NULL)
{
printf("无法打开文件\n");
}
while(fscanf(fp1,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
{
i++;
n=n+1;
}
if(m==1)
{
char s[20];
int j=0;
printf("\t请输入您想查询的姓名:");
scanf("\t%s", s);
while(strcmp(p[j].name,s)!=0&&j<n) j++;
if(j==n)
{
printf("查无此人!!\n");
}
else
{
printf("\t学号: %s\n",p[j].num);
printf("\t姓名: %s\n",p[j].name);
printf("\tC语言: %.2f\n",p[j].cyuyan);
printf("\t高数: %.2f\n",p[j].math);
printf("\t英语: %.2f\n",p[j].english);
printf("\t总分: %.2f\n",p[j].summ);
}
}
if(m==2)
{
char s[15];
int i=0;
printf("请输入您想查询的学号:");
scanf("\t%s",s);
while(strcmp(p[i].num,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t查无此人!!!\n");
system("pause");
return ;
}
else
{
printf("\t学号: %s\n",p[i].num);
printf("\t姓名: %s\n",p[i].name);
printf("\tC语言: %.2f\n",p[i].cyuyan);
printf("\t高数: %.2f\n",p[i].math);
printf("\t英语: %.2f\n",p[i].english);
printf("\t总分: %.2f\n",p[i].summ);
}
}
fclose(fp1);
system("pause");
}
void date()
//查看学生单科排名,从高到低
{
STU per[200];
FILE *fp;
STU temp;
float sum,s[200];
int i=0,n=0;
int j,k,t,m;
system("cls");
printf("\t\n选择排序方式:\n");
printf("\t┌──────┐\n");
printf("\t│1-----C语言 │\n");
printf("\t│2------高数 │\n");
printf("\t│3------英语 │\n");
printf("\t│4------返回 │\n");
printf("\t└──────┘\n");
printf("请输入你要排序的方式\n");
scanf("%d",&m);
system("cls");
while(m!=1&&m!=2&&m!=3&&m!=4)
{
printf("输入错误请重新输入:\n");
scanf("%d", &m);
}
if((fp=fopen("student.txt","r"))==NULL)
{
printf("无法打开文件!!!\n");
system("pause");
return ;
}
while(fscanf(fp,"%s%s%f%f%f%f",per[i].num,per[i].name,&per[i].cyuyan,&per[i].math,&per[i].english,&per[i].summ)!=EOF)
{
i++;
n=n+1;
}
if(m==1)
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(per[i].cyuyan<per[j].cyuyan )
{
temp = per[i];
per[i] = per[j];
per[j] = temp;
}
}
}
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("学号 姓名 C语言 高数 英语 总分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
for(i=0;i<n;i++)
{
printf("%s %s %.2f %.2f %.2f %.2f\n", per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
fclose(fp);
}
if(m==2)
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(per[i].math<per[j].math)
{
temp = per[i];
per[i] = per[j];
per[j] = temp;
}
}
}
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("学号 姓名 C语言 高数 英语 总分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
for(i=0;i<n;i++)
{
printf("%s %s %.2f %.2f %.2f %.2f\n", per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
fclose(fp);
}
if(m==3)
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(per[i].english<per[j].english)
{
temp = per[i];
per[i] = per[j];
per[j] = temp;
}
}
}
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("学号 姓名 C语言 高数 英语 总分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
for(i=0;i<n;i++)
{
printf("%s %s %.2f %.2f %.2f %.2f\n", per[i].num,per[i].name,per[i].cyuyan,per[i].math,per[i].english,per[i].summ);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
}
fclose(fp);
}
}
void amend()
//按学号修改学生个人信息
{
STU temp,p[200];
int k=-1,i=0,n=0;
char c1='y',c2,s[20];
FILE *fp;
while(c1=='y')
{
if((fp=fopen("student.txt","r+"))==NULL)//先用读方式打开文件
{
printf("无法打开文件!\n");
system("pause");
return ;
}
i=0,n=0,k=-1;
while(fscanf(fp,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
{
i++;
n=n+1;
}//将文件内容输出
fclose(fp);
printf("\n请输入要修改的同学的学号:");
scanf("%s", s);
for(i=0;i<n;i++)
{
if(strcmp(s,p[i].num)==0)
{
k=i;
break;
}
}
if(k<0)
{
printf("查无此人!\n");
}
else
{
printf("该学生的个人信息如下,请修改:\n");
printf("---------------------------------------------\n");
printf("学号: %s\n",p[k].num);
printf("姓名: %s\n",p[k].name);
printf("C语言:%.2f\n",p[k].cyuyan);
printf("高数: %.2f\n",p[k].math);
printf("英语: %.2f\n",p[k].english);
printf("总分: %.2f\n",p[k].summ);
printf("---------------------------------------------\n");
printf("请输入修改后的学生信息:\n");
printf("学号:\n");
scanf("%s", p[k].num);
printf("姓名:\n");
scanf("%s", p[k].name);
printf("c语言:\n");
scanf("%f", &p[i].cyuyan);
printf("高数:\n");
scanf("%f", &p[i].math);
printf("英语\n");
scanf("%f", &p[i].english);
p[i].summ = p[i].cyuyan + p[i].english +p[i].math;
if((fp=fopen("student.txt","w"))==NULL)//再用覆盖打开文件
{
printf("无法打开文件!\n");
system("pause");
return ;
}
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %f %f %f %f\n",p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
}
fclose(fp);
printf("修改完成!!\n");
}
c1='n';
}
}
void delet()
//删除指定学号的学生信息
{
STU p[200];
FILE *fp;
char s[10];
int i=0,n=0;
if((fp=fopen("student.txt","r"))==NULL)//先用读方式打开文件
{
printf("无法打开文件!\n");
system("pause");
return ;
}
while(fscanf(fp,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
{
i++;
n=n+1;
}//将文件内容输出
printf("请输入要删除的学生学号:");
scanf("%s",s);
i=0;
while(strcmp(p[i].num,s)!=0&&i<n)
{
i++;
}
int k=i;
fclose(fp);
if(i==n)
{
printf("查无此人!!\n");
return ;
}
else
{
printf("该学生的个人信息如下,已删除:\n");
printf("---------------------------------------------\n");
printf("学号: %s\n",p[k].num);
printf("姓名: %s\n",p[k].name);
printf("C语言:%.2f\n",p[k].cyuyan);
printf("高数: %.2f\n",p[k].math);
printf("英语: %.2f\n",p[k].english);
printf("总分: %.2f\n",p[k].summ);
printf("---------------------------------------------\n");
if((fp=fopen("student.txt","w"))==NULL)//再用覆盖打开文件
{
printf("无法打开文件!\n");
system("pause");
return ;
}
for(i=k;i<n-1;i++)
{
p[i] = p[i+1];
}
n--;
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %f %f %f %f\n",p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
}
}
fclose(fp);
printf("删除成功\n");
}
void myself()
//给定查看范围,函数展示成绩处于范围内的学生信息
{
FILE *fp;
float q,z;
STU temp;
STU p[200];
printf("请输入您要查看的分数段:\n");
printf("起始分数:\n");
scanf("%f", &q);
printf("终止分数:\n");
scanf("%f", &z);
if((fp=fopen("student.txt","r"))==NULL)//再用覆盖打开文件
{
printf("无法打开文件!\n");
system("pause");
return ;
}
int i=0,j,n=0;
while(fscanf(fp,"%s%s%f%f%f%f",p[i].num,p[i].name,&p[i].cyuyan,&p[i].math,&p[i].english,&p[i].summ)!=EOF)
{
i++;
n=n+1;
}//将文件内容输出
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(p[i].summ>p[j].summ)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
if(p[n-1].summ<q||p[0].summ>z)
{
printf("没有成绩处于此范围!!\n");
}
else
{
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("学号 姓名 C语言 高数 英语 总分\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
for(i=0;i<n;i++)
{
if(p[i].summ<=z&&p[i].summ>=q)
printf("%s %s %.2f %.2f %.2f %.2f\n", p[i].num,p[i].name,p[i].cyuyan,p[i].math,p[i].english,p[i].summ);
}
}
}