C语言设计问题!
发布网友
发布时间:2023-11-20 16:25
我来回答
共1个回答
热心网友
时间:2024-10-03 22:04
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
#define ESC 0x1b; //ESC的ASCII码是0x1b。
#define N 100
char choice='y';
int count=0;
int i=0;
struct student
{
int ID;
char name[20];
double score1;
double score2;
double score3;
double average;
}stud[N+1],s[N];
void printstar()
{
for(i=0;i<80;i++)
{
printf("*");
}
printf("\n");
}
void time()
{
for(i=0;i<3.3e08;i++);
}
void login()//用户登陆
{
char name[15],pwd[15],c;
printf("\n\n\t\t\t\t用户登陆\n\n");
printf("\t\t用户名:");
gets(name);
printf("\n\t\t密码:");
c = getch();
while(c != '\r')
{
if(i >= 0)
{
if (c == '\b')
{
printf("\b \b");
i = i - 1;
}
else
{
printf("*");
pwd[i] = c;
}
}
c = getch();
if(c != '\b')
i = i + 1;
}
pwd[i] = '\0';
if((strcmp(name,"little boy")==0)&&(strcmp(pwd,"123456")==0))
printf("\n\n登陆成功!\n");
else
printf("\n\n登陆失败!\n");
}
void input() //录入数据
{
FILE * fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
fp=fopen("stu.dat","w");
}
else
{
fp=fopen("stu.dat","ab");
}
system("cls");
do
{
printf("\n\t\t\t\t学生信息录入\n");
printstar();
printf("\n学号:");
scanf("%d",&stud[i].ID);
printf("\n姓名:");
scanf("%s",stud[i].name);
printf("\n三门课成绩分别为:");
scanf("%lf %lf %lf",&stud[i].score1,&stud[i].score2,&stud[i].score3);
stud[i].average=(stud[i].score1+stud[i].score2+stud[i].score3)/3;
printf("\n平均成绩为:%3.1lf\n",stud[i].average);
fwrite(&stud[i],sizeof(struct student),1,fp);
count++;
fflush(stdin);
printf("是否继续录入(y/n)?");
scanf("%c",&choice);
system("cls");
if(choice!='y'&&choice!='n')
{
printstar();
printf("\n\t您输入了非法字符,请重新输入!\n\n");
printstar();
time();
}
printf("\n");
}while(choice=='y');
fclose(fp);
}
void browse() //浏览
{
system("cls");
FILE * fp;
fp=fopen("stu.dat","rb");
printf("\n\t\t\t\t学生信息浏览\n\n");
printstar();
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
}
void byID() //按学号查询
{
int ch_ID;
FILE * fp;
fp=fopen("stu.dat","rb");
system("cls");
printf("\n\n\t\t输入学号:");
scanf("%d",&ch_ID);
if(ch_ID==stud[i].ID)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void byname() //按姓名查询。
{
char ch_name[20];
FILE * fp;
fp=fopen("stu.dat","rb");
system("cls");
printf("输入姓名:");
scanf("%d",ch_name);
if(strcmp(ch_name,stud[i].name)==0)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void query() //查询函数
{
int choose;
system("cls");
do
{
//system("cls");
printf("\n\t\t\t\t学生信息查询\n\n");
printstar();
printf("________________________________________________________________________________\n");
printf("\t\t\t\t1.〖按学号查询〗\n\n");
printf("\t\t\t\t2.〖按姓名查询〗\n\n");
printf("\t\t\t\t3. 〖返回〗\n");
printf("________________________________________________________________________________\n");
printf("\t\t请选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:
byID();
break;
case 2:
byname();
break;
case 3:
return;
}
if(choose!=1 && choose!=2 && choose!=3)
printf("选择错误!");
}while(choose!=1 && choose!=2);
}
void update() //修改学生信息
{
FILE * fp;
fp=fopen("stu.dat","rb+");
system("cls");
printf("\n\t\t\t\t学生信息修改\n\n");
printstar();
printf("\t\n输入要修改信息的学生学号:");
scanf("%d",&stud[i].ID);
fread(&stud[i],sizeof(struct student),1,fp);
printf("\n修改前的数据:\n");
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
fclose(fp);
}
void del() //信息删除函数
{
FILE * fp;
int del_ID;
char choose='Y';
fp=fopen("stu.dat","rb");
system("cls");
printf("\n\t\t\t\t学生信息删除\n\n");
if(count==0)
{
printstar();
printf("\n\n\t\t\t您的学生数据库中无任何记录!\n\n\n");
printstar();
return;
}
do
{
printf("\t\n输入要删除信息的学生学号:");
scanf("%d",&del_ID);
if(del_ID==stud[i].ID)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
printf("\n\n您确定要删除%d号学员的信息吗(Y/N):");
scanf("%c",&choose);
if(choose=='Y')
{
for(i=0;i<count-1;i++)
{
stud[i]=stud[i+1];
count--;
}
printf("\n删除后的全体学员信息:\n");
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
printf("\n\n\t\t\t按ESC返回\n\n");
}
}
else
return;
}
else
printf("\n\n对不起,不存在%d号学员的信息.");
}while(choice=='y');
fclose(fp);
}
void sort_ID() //按学号排序
{
FILE * fp;
int j=0,temp=0;
fp=fopen("stu.dat","rb");
for(i=0;i<count;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stud[j].ID>stud[j+1].ID)
{
temp=stud[j].ID;
stud[j].ID=stud[j+1].ID;
stud[j+1].ID=temp;
}
}
}
system("cls");
printf("\n\t\t\t\t按学号排序后的列表\n\n");
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void sort_ave() //按平均分排序
{
FILE * fp;
int j=0;
double temp=0;
fp=fopen("stu.dat","rb");
for(i=0;i<count;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stud[j].average>stud[j+1].average)
{
temp=stud[j].average;
stud[j].average=stud[j+1].average;
stud[j+1].average=temp;
}
}
}
system("cls");
printf("\n\t\t\t\t按平均分排序后的列表\n\n");
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("\t学号 姓名 成绩1 成绩2 成绩3 平均成绩\n");
printf("\t%d %s %4.1lf %4.1lf %4.1lf %4.1lf\n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void sort() //排序函数
{
int choose;
system("cls");
do
{
system("cls");
printf("\n\n\n\t\t\t\t学生信息排序\n\n");
printstar();
printf("\t\t\t\t1.〖按平均分排序〗\n\n");
printf("\t\t\t\t2. 〖按学号排序〗\n\n");
printf("\t\t\t\t3. 〖返回〗\n\n");
printstar();
printf("\t\t\t请选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:
sort_ave();
break;
case 2:
sort_ID();
break;
case 3:
return;
}
}while(choose!=1&&choose!=2&&choose!=3);
}
void logout() //退出程序
{
system("cls");
printf("\n\n\n\t\t\t 您将退出学生信息管理系统!\n\n");
printstar();
printf("\n\n\t\t感谢您使用本管理系统,如有任何问题请与开发者联系\n\n");
printf("\t\t开发者:高志林\t\tE-mail:gao0@163.com\n\n\n\n\n");
printstar();
}
void main()
{
char choice='1';
//login();
system("cls");
do
{
system("cls");
printstar();
printf("\n\t\t\t欢迎使用学生信息管理系统!\n\n");
printstar();
printf("\n\t\t\t\t1.【信息录入】\n");
printf("\n\t\t\t\t2.【信息浏览】\n");
printf("\n\t\t\t\t3.【信息查询】\n");
printf("\n\t\t\t\t4.【信息修改】\n");
printf("\n\t\t\t\t5.【信息删除】\n");
printf("\n\t\t\t\t6.【信息排序】\n");
printf("\n\t\t\t\t7. 【退出】\n");
printf("\n\t\t\t请选择:");
scanf("%c",&choice);
switch(choice)
{
case '1':
input();
break;
case '2':
browse();
break;
case '3':
query();
break;
case '4':
update();
break;
case '5':
del();
break;
case '6':
sort();
break;
case '7':
logout();
break;
default:
printf("输入错误");
}
}while(choice!='1'&&choice!='2'&&choice!='3'&&choice!='4'&&choice!='5'&&choice!='6'&&choice!='7');
}