大二学习数据结构曾经使用结构体的方式编写一师生信息管理系统,目前正在学习面向对象,如何在c++中定义一个student类的数组,使得调用时完成简便的调用。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
FILE *fp; /*定义文件*/
char a; /*返回选择变量*/
float kqcs=0; /*应到考勤次数变量*/
struct student
{
char name[10];
char number[11];
char sex;
int year;
int month;
int day;
int kq;
}stu[100]; /*定义储存学生信息的结构体数组*/
/*主 函 数 开 始*/
int main()
{
void input(); /*录入数据函数*/
void change(); /*修改数据函数*/
void search(); /*查询数据函数*/
void evaluate(); /*考勤分数评估函数*/
char item;
system("color 3e"); /*系统颜色*/
printf("+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n");
printf("******学生考勤管理系统******\n");
printf(" *** *** ***共同制作\n");
printf("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n");
printf("-+1.学生信息及考勤情况录入-+\n");
printf("-+ -+\n");
printf("-+2.学生信息及考勤情况查找-+\n");
printf("-+ -+\n");
printf("-+3.学生信息及考勤情况修改-+\n");
printf("-+ -+\n");
printf("-+4.学生考勤的总评分数计算-+\n");
printf("-+ -+\n");
printf("-+5.退出学生考勤管理系统 -+\n");
printf("——————————————\n"); /*用户界面*/
printf("\n");
printf("请选择您希望进行的操作,输入对应的数字\n");
scanf("%c",&item);
switch(item)
{
case '1': input();break;
case '2': search();break;
case '3': change();break;
case '4': evaluate();break;
case '5': printf("************退出考勤系统,欢迎下次使用!***************");break;
}
/*实现功能选择*/
return 0;}
/*主 函 数 结 束*/
/*录入数据函数内容开始*/
void input()
{
printf("*********学生基本信息录入***********\n");
int i,j=0,jx=1;
printf("\n");
printf("***请将学生基本信息录入***\n");
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;jx==1;i++) /* 输入信息循环 */
{
for(;j==0;) /* 输入确认循环 */
{
getchar();
printf("请输入第%d个学生的姓名 ",i+1);
gets(stu[i].name);
printf("请输入第%d个学生的学号 ",i+1);
gets(stu[i].number);
printf("请输入第%d个学生的性别(男:m 女:f) ",i+1);
stu[i].sex=getchar();
printf("请输入第%d个学生的生日(格式:年 月 日) ",i+1);
scanf("%d%d%d",&stu[i].year,&stu[i].month,&stu[i].day);
printf("请输入第%d个学生的当前考勤次数 ",i+1);
scanf("%d",&stu[i].kq);
printf("\n");
printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[i].name,stu[i].number,stu[i].sex,stu[i].year,stu[i].month,stu[i].day,stu[i].kq);
printf("#####################################################################################################\n");
printf(" 0 重新录入 1 确认 \n");
scanf("%d",&j); /*输入确认*/
}
j=0;
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("文件写入错误\n"); /*写入文件*/
printf("是否继续输入下一个学生信息 0 停止 1 继续\n");
scanf("%d",&jx); /*继续输入选择*/
}
fclose(fp);
printf("0 返回主菜单\n");
getchar();
a=getchar();
getchar();
if(a=='0')
system("pause");
system("cls");
main();
}
/*返回主菜单*/
/*录入数据函数内容结束*/
/*修改数据函数内容开始*/
void change()
{
printf("************修改学生信息及考勤情况***************\n");
int i=0,j=0,sway,x;
int t=1;
char name[10],number[10];
printf("学生考勤修改\n");
if((fp=fopen("data.txt","rb"))==NULL) /*将文件内容读入内存*/
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;feof(fp)==0;i++)
fread(&stu[i],sizeof(struct student),1,fp); /*读取文件内容*/
fclose(fp); /*关闭文件*/
printf("选择您要查找的方式 1 按照姓名查找 2 按照学号查找");
scanf("%d",&sway);
/*按照姓名查找开始*/
if(sway==1)
{
printf("请输入您需要修改的学生的姓名 ");
scanf("%s",name);
for(j=0;t!=0;j++)
{
t=strcmp(stu[j].name,name);
if(j==i)
{
t=0;
printf("未找到您所查询的数据,请重新输入\n");
}
}
if(j<i)
/*查询成功*/
{
printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);
printf("#####################################################################################################\n");
printf("是否修改该生考勤信息 0 否 1 是"); /*选择是否修改考勤*/
scanf("%d",&x); /*输入选择变量值*/
if(x==1)
{
printf("请输入新的考勤数 ");
scanf("%d",&stu[j-1].kq); /*输入新的考勤数*/
if((fp=fopen("data.txt","wb"))==NULL) /*以只写方式打开文件*/
{
printf("文件打开失败\n");
exit(0);
}
for(j=0;j<i;j++)
if(fwrite(&stu[j],sizeof(struct student),1,fp)!=1) printf("文件写入错误\n"); /*写入文件*/
fclose(fp); /*关闭文件*/
}
}
printf("是否继续修改其他学生考勤 0 否 1 是");
scanf("%d",&x);
if(x==1)
change();
}
/*按照姓名查找结束*/
/*按照学号查找开始*/
if(sway==2)
{
printf("请输入您需要修改的学生的学号 ");
scanf("%s",number);
for(j=0;t!=0;j++)
{
t=strcmp(stu[j].number,number);
if(j==i)
{
t=0;
printf("未找到您所查询的数据,请重新输入\n");
}
}
if(j<i) /*查询成功*/
{ printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);
printf("#####################################################################################################\n");
printf("是否修改该生考勤信息 0 否 1 是"); /*选择是否修改考勤*/
scanf("%d",&x); /*输入选择变量值*/
if(x==1)
{
printf("请输入新的考勤数");
scanf("%d",&stu[j-1].kq); /*输入新的考勤数*/
if((fp=fopen("data.txt","wb"))==NULL) /*以只写方式打开文件*/
{
printf("文件打开失败\n");
exit(0);
}
for(j=0;j<i;j++)
if(fwrite(&stu[j],sizeof(struct student),1,fp)!=1) printf("文件写入错误\n"); /*写入文件*/
fclose(fp); /*关闭文件*/
}
}
printf("是否继续修改其他学生考勤 0 否 1 是");
scanf("%d",&x);
if(x==1) change();
}
/*按照学号查找结束*/
printf("0 返回主菜单\n");
getchar();
a=getchar();
getchar();
if(a=='0')
system("pause");
system("cls");
main();
}
/*修改数据函数内容结束*/
/*查询数据函数内容开始*/
void search()
{
printf("************查询学生信息及考勤情况************\n");
int i=0,j=0,sway,x;
int t=1;
char name[10],number[10];
printf("学生信息查询\n");
if((fp=fopen("data.txt","r"))==NULL) /*将文件内容读入内存*/
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;feof(fp)==0;i++)
fread(&stu[i],sizeof(struct student),1,fp); /*读取文件内容*/
fclose(fp); /*关闭文件*/
printf("选择查找方式 1 按照姓名查找 2 按照学号查找");
scanf("%d",&sway);
/*按照姓名查找开始*/
if(sway==1)
{
printf("请输入您需要查询的学生的姓名 ");
scanf("%s",name);
for(j=0;t!=0;j++)
{
t=strcmp(stu[j].name,name);
if(j==i)
{
t=0;
printf("未找到您所查询的数据,请重新输入\n");
}
}
if(j<i)
/*查询成功*/
{
printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);
printf("#####################################################################################################\n");
}
printf("您是否继续查询其他学生信息 0 否 1 是");
scanf("%d",&x);
if(x==1)
search();
}
/*按照姓名查找结束*/
/*按照学号查找开始*/
if(sway==2)
{
printf("请输入您需要查询的学生的学号 ");
scanf("%s",number);
for(j=0;t!=0;j++)
{
t=strcmp(stu[j].number,number);
if(j==i)
{
t=0;
printf("未找到您所查询的数据,请重新输入\n");
}
}
if(j<i) /*查询成功*/
{ printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);
printf("#####################################################################################################\n");
}
printf("是否继续查询其他学生信息 0 否 1 是");
scanf("%d",&x);
if(x==1)
search();
}
/*按照学号查找结束*/
printf("0 返回主菜单\n");
getchar();
a=getchar();
getchar();
if(a=='0')
system("pause");
system("cls");
main();
}
/*查询数据函数内容结束*/
/*考勤分数评估*/
void evaluate()
{
int i=0,j=0,sway,x;
int t=1;
float score;
char name[10],number[10];
printf(" ***********************学 生 考 勤 分 数 计 算**************************\n");
printf("请输入应到考勤总数 "); /*请输入应到考勤总数*/
scanf("%f",&kqcs);
if((fp=fopen("data.txt","rb"))==NULL) /*将文件内容读入内存*/
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;feof(fp)==0;i++)
fread(&stu[i],sizeof(struct student),1,fp); /*读取文件内容*/
fclose(fp); /*关闭文件*/
printf("选择查找方式 1 按照姓名查找 2 按照学号查找");
scanf("%d",&sway);
/*按照姓名查找*/
if(sway==1)
{
printf("请输入需要计算学生的姓名 ");
scanf("%s",name);
for(j=0;t!=0;j++)
{
t=strcmp(stu[j].name,name);
if(j==i)
{
t=0;
printf("未找到您所查询的数据,请重新输入\n");
}
}
if(j<i) /*查询成功*/
{ printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);
printf("#####################################################################################################\n");
score=(stu[j-1].kq)/kqcs*100;
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("该生当前考勤分数为 %5.2f\n",score);
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
printf("是否继续计算其他学生考勤分数 0 否 1 是");
scanf("%d",&x);
if(x==1) evaluate();
}
/*按照姓名查找结束*/
/*按照学号查找开始*/
if(sway==2)
{
printf("请输入需要计算分数学生的学号 ");
scanf("%s",number);
for(j=0;t!=0;j++)
{
t=strcmp(stu[j].number,number);
if(j==i)
{
t=0;
printf("未找到您所查询的数据,请重新输入\n");
}
}
if(j<i) /*查询成功*/
{ printf("#####################################################################################################\n");
printf(" 您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %4d年%2d月%2d日 考勤次数 %4d \n",stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);
printf("#####################################################################################################\n");
score=(stu[j-1].kq)/kqcs*100;
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("该生当前考勤分数为 %5.2f\n",score);
printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
printf("是否继续计算其他学生考勤分数 0 否 1 是");
scanf("%d",&x);
if(x==1) evaluate();
}
/*按照学号查找结束*/
printf("0 返回主菜单\n");
getchar();
a=getchar();
getchar();
if(a=='0')
system("pause");
system("cls");
main();
}
例如:如何在类的定义中实现gets(stu[i].name);
目前更改到这一部分不会改了
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
FILE *fp; /*定义文件*/
char a; /*返回选择变量*/
float kqcs=0; /*应到考勤次数变量*/
class student
{
public:
char name[10];
char number[11];
char sex;
int year;
int month;
int day;
int kq;
void input(); /*录入数据函数*/
void change(); /*修改数据函数*/
void search(); /*查询数据函数*/
void evaluate(); /*考勤分数评估函数*/
student();
};
student::student()
{
}
void student::input()
{
cout<<"*********学生基本信息录入***********"<<endl;
int i,j=0,jx=1;
cout<<endl;
cout<<"***请将学生基本信息录入***"<<endl;
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件打开失败\n");
exit(0);
}
for(i=0;jx==1;i++)
{
for(;j==0;)
{
cout<<"请输入第i+1个学生的姓名 ";
cin>>//不会输入了
}
}
}
简单点就是:
class student
{
public:
char name[10];
char number[11];
char sex;
int year;
int month;
int day;
int kq;
};
student stu[100];