石家庄铁道大学 C程序设计代码第6天

本次代码我个人编写,代码存在 更优解 有些复杂化了。
请帮我优化,对于提交作业,是 肯定满足要求的
//学生成绩管理系统

include <stdio.h>

include <string.h>

int sum=0;//统计记录条数

struct student
{

char name[100];
char xuehao[9];
	char xb[3];// xingbie
char age[4];//nianling
char bj[8];//banji
char xy[20];//xueyuan
char zy[10];zhuanye
char jtzz[100];jiatingzhuzhi 

};
struct student stu[100]; //定义结构体数组 stu【100】
int build()
{
int x;
printf(“请输入你要创建的信息的条数,并键入:”);//
scanf("%d",&x);
printf(“学号 姓名 性别 年龄 班级 学院 专业 家庭地址\n”);
for(int i=0;i<x;i++)// 输入到 信息结构体数组
{
scanf("%s%s%s%s%s%s%s%s",&stu[i].xuehao,&stu[i].name,&stu[i].xb,&stu[i].age,&stu[i].bj,&stu[i].xy,&stu[i].zy,&stu[i].jtzz);

}
sum=x;//同统计 数据 总量 (总条数——)
return 0;

}
int add()
{
int n=0,i,sumx;
int x;
sumx=sum; //继承sum的值 作为 for循环上限
printf(“请输入你想添加的记录条数:”);
scanf("%d",&n);
printf(“学号-姓名-性别-年龄-班级-学院-专业-家庭地址\n”);
for(i=sumx;i<sumx+n;i++)

{	
	scanf("%s",&stu[i].xuehao);
	scanf("%s%s%s%s%s%s%s",&stu[i].name,&stu[i].xb,&stu[i].age,&stu[i].bj,&stu[i].xy,&stu[i].zy,&stu[i].jtzz);//录入数据。只支持 添加到最后
	sum=sum+1;     // sumx的作用就是 怕sum的改变影响循环的进行
}
printf("add模式已经退出\n");
return 0 ;

}
int find()
{
int flag=0,i;

int n;
char mc[10];
printf("请输入你要查找的 类别:");
printf("1 学号 2 姓名 ");//两种情况  if语句
scanf("%d",&n);
printf("输入对应数据: ");
scanf("%s",&mc);
if(n==1);
{
	for(i=0;i<sum;i++);//遍历所有结构体数组
	{//strcmp 作用是比较两个字符串,若相同返回0
		if(strcmp(mc,stu[i].xuehao)==0)printf("%s%s%s%s%s%s%s%s",stu[i].xuehao,stu[i].name,stu[i].xb,stu[i].age,stu[i].bj,stu[i].xy,stu[i].zy,stu[i].jtzz);
		flag =1;  // 用于 判断所有结构体数组中是否有 相同的,有则为1,0的话下一句   输出一句话
	}  
	if(flag==0)printf("无相同数据");
}
	else if(n==2)
	{
	for(i=0;i<strlen(stu[i].name);i++);
	{
		if(strcmp(mc,stu[i].name)==0)printf("%s%s%s%s%s%s%s%s",stu[i].xuehao,stu[i].name,stu[i].xb,stu[i].age,stu[i].bj,stu[i].xy,stu[i].zy,stu[i].jtzz);
		flag =1;
	}
	if(flag==0)printf("无相同数据");
	}
	

return  0;

}

int print()
{
int i;
printf(“序号:学号-姓名-性别-年龄-班级-学院-专业-家庭地址\n”);
for(i=0;i<sum;i++)
{
printf("%d “,i+1); //for循环 打印出所有数据 (<sum 的值)
printf(”%s-%s-%s-%s-%s-%s-%s-%s\n",stu[i].xuehao,stu[i].name,stu[i].xb,stu[i].age,stu[i].bj,stu[i].xy,stu[i].zy,stu[i].jtzz);
}
return 0;
}
int delete1()
{
int x,i;
printf(“请输入你要删除的序号:”);
scanf("%d",&x);
for(i=x-1;i<sum;i++) //删除的本质就是 结构体数组 选定序号(如stu【5】) 后的数组全部前移 用strcpy 函数,因为 移动对象都是 字符数组
{
strcpy(stu[i].xuehao,stu[i+1].xuehao);
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i].xb,stu[i+1].xb);
strcpy(stu[i].age,stu[i+1].age);
strcpy(stu[i].xy,stu[i+1].xy);
strcpy(stu[i].zy,stu[i+1].zy);
strcpy(stu[i].jtzz,stu[i+1].jtzz);
sum=sum-1;
printf(“更新为:”);
print();
}
return 0 ;
}

int change()
{
int n;
printf(“请输入你要修改的序号:”);
scanf("%d",&n);
printf(“请输入你要修改的内容:”);
for(int i=0;i<sum;i++)
{
if((i+1)==n) //找到与 序号相同,因为i从 0开始,序号从1开始。所以需要 i+1、
{
scanf("%s%s%s%s%s%s%s%s",&stu[i].xuehao,&stu[i].name,&stu[i].xb,&stu[i].age,&stu[i].bj,&stu[i].xy,&stu[i].zy,&stu[i].jtzz);//直接输入

	}
}
printf("更新为:");
	 print();
return 0 ;

}

int main()
{
int n ,flag=1,i=0;
char ch;
FILE *fp; //定义文件指针 fp

printf("********************欢迎来到学生信息管理系统  v1.0  made by wangwei********************\n");
while(flag!=0)  //while 循环通过改变flag的量 来控制是否退出程序
{
	
	printf("\t\t\t\t\t1 创建\n\t\t\t\t\t2 添加\n\t\t\t\t\t3 查询\n\t\t\t\t\t4 修改\n\t\t\t\t\t5 删除\n\t\t\t\t\t6 显示\n\t\t\t\t\t7 从文件导入\n\t\t\t\t\t8 导出到文件\n\t\t\t\t\t9 退出\n请选择:");	
	scanf("%d",&n);
	if(n==1)    //通过选择判断 执行步骤
	{
		build();
	}
	else if(n==2)
	{
		add();
	}
	else if(n==3)
	{
		find();
	}
	else if(n==4)
	{
		change();
	}
	else if(n==5)
	{
		delete1();
	}
	else if(n==6)
	{
		print();
	}
	else if(n==7)
	{
		fp = fopen("学生.text","rt+");//用读写模式 打开文件。xxxx
		if(fp==NULL)//文件指针 没有打开文件的话(返回值为NULL的话则打印错误)
		{
			printf("Error opening file file Ex1216\n");
		}
		i=0;
		while(!feof(fp))//  feof(fp)判断 指针是否到最后  ,此句意思是 没到最后则。录入一行 
		{	
			fscanf(fp,"%s %s %s %s %s %s %s %s",stu[i].xuehao,stu[i].name,stu[i].xb,stu[i].age,stu[i].bj,stu[i].xy,stu[i].zy,stu[i].jtzz); 
			printf("已输入数据:%s %s %s %s %s %s %s %s",stu[i].xuehao,stu[i].name,stu[i].xb,stu[i].age,stu[i].bj,stu[i].xy,stu[i].zy,stu[i].jtzz);
			
			i=i+1;  //用于判断是否是空文件,否的话  则 用sum-1限制。
			sum=sum+1;   //总数+1
	
		}
		printf("************************导入成功!*********************\n",i+1);
		if(i>0)sum=sum-1;   //因为 会多录入一行 奇怪的乱码 用sum来控制这一行乱码不被输出
		fclose(fp);//关闭文件
	}
	else if(n==8)
	{	
		fp = fopen("学生.text","rt+");
		if(fp==NULL)
		{
			printf("Error opening file file Ex1216\n");
		}
		for(i=0;i<sum;i++)   //写入
		{
			/*fwrite(stu[i].xuehao, sizeof(stu[i].xuehao) , 1, fp );
			fwrite(stu[i].name, sizeof(stu[i].name) , 1, fp );
			fwrite(stu[i].xb, sizeof(stu[i].xb) , 1, fp );
			fwrite(stu[i].age, sizeof(stu[i].age) , 1, fp );
			fwrite(stu[i].bj, sizeof(stu[i].bj) , 1, fp );
			fwrite(stu[i].zy, sizeof(stu[i].zy) , 1, fp );
			fwrite(stu[i].xy, sizeof(stu[i].xy) , 1, fp );
			fwrite(stu[i].jtzz, sizeof(stu[i].jtzz) , 1, fp );*/                //使用fwrite这个函数输出又丑又长,还没找到方法控制两个字符间距离。
			
			


			fprintf(fp,"%s %s %s %s %s %s %s %s\n",stu[i].xuehao,stu[i].name,stu[i].xb,stu[i].age,stu[i].bj,stu[i].zy,stu[i].xy,stu[i].jtzz);//fprint可以控制字符间距离
			printf("******************导出第%d次完成!*********************\n",i+1);
		}
		//printf("******************导出完成!*******************\n");
	}
	
	else if(n==9)
	{
		printf("Thanks for your using.");
		flag=0;  
	}
	else printf("输入出错误请重新输入:\n");
}
	fclose(fp);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值