#include <stdio.h>
#include <string.h>
#define SIZE 100
struct student {
int num;//学号
char name[20];//名字
int ege;//年龄
char sex[4];//性别
char birthday[16];//生日
char address[20];//地址
char phone[11];//电话
char email[20];//邮箱
}stu[SIZE];
/** 1录入数据 */
void stu_input(){
FILE *stuFile; //定义文件指针
int i;
stuFile=fopen("fstu", "wb"); //以读写的方式打开文件
if(stuFile==NULL){
printf("无法打开文件");
return;
}
for (i=0; i<SIZE; i++) {
printf("请输入学号,姓名,年龄,性别,生日,地址,电话,邮箱\n");
int result= scanf("%d %s %d %s %s %s %s %s",&stu[i].num,stu[i].name,&stu[i].ege,stu[i].sex,stu[i].birthday,stu[i].address,stu[i].phone,stu[i].email);
//判断用户输入是否合法,正确输入的话scanf函数会返回值8,错误会返回"EOF"
if (result!=8) {//不合法可能会导致程序崩溃,所以要退出
printf("输入不合法哈哈");
fclose(stuFile);
return;
}
if( fwrite(&stu[i],sizeof(struct student),1,stuFile)==1){
printf("录入成功,返回请输入0,继续录入请输入1\n");
int a;
scanf("%d",&a);
if (a==0) {
fclose(stuFile);
return;
}else if(a==1){
//继续录入
}else{
printf("输入不合法");
fclose(stuFile);
return;
}
}else{
printf("录入失败");
};
}
fclose(stuFile);//关闭文件
}
/** 2浏览数据 */
void stu_list(){
FILE *stuFile;
int i;
stuFile=fopen("fstu","rb"); //以只读的方式打开文件
if(stuFile==NULL){
printf("无法打开文件");
return;
}
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 学生信息列表\n");
printf("-----------------------------------------------------------\n");
printf(" 学号 姓名 年龄 性别 生日 地址 电话 邮箱 \n");
printf("-----------------------------------------------------------");
printf("\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,stuFile)==1;i++)
{
printf("%4d %s %4d %s %s %s %s %s \n",stu[i].num,stu[i].name,stu[i].ege,stu[i].sex,stu[i].birthday,stu[i].address,stu[i].phone,stu[i].email);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(stuFile); //关闭文件
}
/** 3查找数据 */
void stu_search(){
FILE *stuFile;
int i;
char searKey[20];
stuFile=fopen("fstu","rb");
rewind(stuFile);
printf("请输入要查找的姓名:");
scanf("%s",searKey);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 查询结果\n");
printf("-----------------------------------------------------------\n");
printf(" 学号 姓名 年龄 性别 生日 地址 电话 邮箱 \n");
printf("-----------------------------------------------------------\n");
for(i=0;i<=SIZE;i++)
if(strcmp(searKey, stu[i].name)==0)
{
printf("%4d %s %4d %s %s %s %s %s \n",stu[i].num,stu[i].name,stu[i].ege,stu[i].sex,stu[i].birthday,stu[i].address,stu[i].phone,stu[i].email);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");
fclose(stuFile);
}
/** 4增加数据 */
void stu_add(){
int i,s;
FILE *stuFile;
stuFile=fopen("fstu","ab+");
rewind (stuFile);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 学生信息列表\n");
printf("-----------------------------------------------------------\n");
printf(" 学号 姓名 年龄 性别 生日 地址 电话 邮箱 \n");
printf("-----------------------------------------------------------");
printf("\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,stuFile)==1;i++)
{
printf("%4d %s %4d %s %s %s %s %s \n",stu[i].num,stu[i].name,stu[i].ege,stu[i].sex,stu[i].birthday,stu[i].address,stu[i].phone,stu[i].email);
}
printf("-----------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※请在下方添加一条※※※※※※※※※※※※※※※\n");
s=i;
for (i=s; i<SIZE; i++) {
printf("请输入学号,姓名,年龄,性别,生日,地址,电话,邮箱\n");
int result= scanf("%d %s %d %s %s %s %s %s",&stu[i].num,stu[i].name,&stu[i].ege,stu[i].sex,stu[i].birthday,stu[i].address,stu[i].phone,stu[i].email);
//判断用户输入是否合法,正确输入的话scanf函数会返回值8,错误会返回"EOF"
if (result!=8) {//不合法可能会导致程序崩溃,所以要退出
printf("输入不合法哈哈");
fclose(stuFile);
return;
}
if( fwrite(&stu[i],sizeof(struct student),1,stuFile)==1){
printf("添加成功,返回请输入0,继续添加请输入1\n");
int a;
scanf("%d",&a);
if (a==0) {
fclose(stuFile);
return;
}else if(a==1){
//继续录入
}else{
printf("输入不合法");
fclose(stuFile);
return;
}
}else{
printf("录入失败");
};
}
}
/** 5排序 */
void stu_sort(){
FILE *stuFile;
int i;
stuFile=fopen("fstu","rb"); //以只读的方式打开文件
if(stuFile==NULL){
printf("无法打开文件");
return;
}
for(i=0;fread(&stu[i],sizeof(struct student),1,stuFile)==1;i++)
{
}
fclose(stuFile);
int a ,j;
//冒泡排序算法,将每两个元素相比较
for (a=0; a<i-1; a++){ /* 外循环为排序趟数*/
for (j=0; j<i-1-a; j++) { /* 内循环为每趟比较的次数,第a趟比较i-1-a次 */
if (stu[j].ege > stu[j+1].ege) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
stu[99] = stu[j];
stu[j] = stu[j+1];
stu[j+1] = stu[99];
}
}
}
printf(" 学生信息列表\n");
printf("-----------------------------------------------------------\n");
printf(" 学号 姓名 年龄 性别 生日 地址 电话 邮箱 \n");
printf("-----------------------------------------------------------");
printf("\n");
for (int x=0; x<i; x++) {
printf("%4d %s %4d %s %s %s %s %s \n",stu[x].num,stu[x].name,stu[x].ege,stu[x].sex,stu[x].birthday,stu[x].address,stu[x].phone,stu[x].email);
}
printf("-----------------------------------------------------------\n\n");
}
int main(int argc, const char * argv[]) {
//菜单
printf("\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 欢迎来到学生信息管理系统 ※\n");
printf("※ ※\n");
printf("※ 院部:计算机与信息工程 专业:计算机与科学技术 5班 ※\n");
printf("※ 姓名: 学号: ※\n");
printf("※ 班内序号: 指导老师: ※\n");
printf("※ ※\n");
printf("※ 主菜单 ※\n");
printf("※ ※\n");
printf("※ ▲1.录入数据▲ ※\n");
printf("※ ▲2.浏览数据▲ ※\n");
printf("※ ▲3.查找数据▲ ※\n");
printf("※ ▲4.增加数据▲ ※\n");
printf("※ ▲5.年龄排序▲ ※\n");
printf("※ ▲6.退出系统▲ ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");
for(;;)
{
int n=6;
printf("\n");
printf("请输入选择项(1-6):");
scanf("%d",&n);
printf("\n");
if(n>0&&n<6)
{
switch(n)
{
case 1:stu_input();break;
case 2:stu_list();break;
case 3:stu_search();break;
case 4:stu_add();break;
case 5:stu_sort();break;
case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 谢谢使用! ※\n");
printf("※ 再见! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
return 0;
}
}
else
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ ※\n");
printf("※ 输入错误! ※\n");
printf("※ 已退出系统! ※\n");
printf("※ ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");
break;
}
}
}
网友评论