2301_80013232 2023-09-28 11:32 采纳率: 0%
浏览 7

C语言编译 学生成绩管理系统

img

图中的题目二,有人解答下吗,用C语言,尽量不用全局变量和数组,用动态内存分配,上面的要求全要实现,谢谢。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-28 14:04
    关注

    【相关推荐】



    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7488254
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:从键盘上输入字符,分别统计其中字母,数字,其他字符的个数,并以柱状图的形式打印。C实现
    • 您还可以看一下 王利涛老师的C语言实战之学生成绩管理系统课程中的 课程及项目简介小节, 巩固相关知识点
    • 除此之外, 这篇博客: C语言实现可写入文件的账号密码登录系统,密码输入时掩盖,登录界面菜单选择,更改密码系统,课设必备。中的 3.注册系统 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      void Register()
      {
      	Users a, b;//创建用户结构体临时变量,a是用来接收用户输入的,b是用来从文件中读取的,来和a作比较
      
      	char tmp[20]="";//用着下面判断的
      
      	printf("欢迎来到注册界面!\n");
      	FILE* pf = fopen("users.dat", "rb");//"rb"是以二进制只读方式打开文件的意思
      	fread(&b, sizeof(Users), 1, pf);//将数据读入b中
      	if (!pf)//如果打开失败
      	{
      		printf("%s", strerror(errno));//errno可以理解是报的错误对应的编号,strerror可以把这个编号翻译出来,输出在屏幕上
      		return;
      	}
      	Sleep(800);
      
      	printf("请输入您的账号>>");
      	scanf("%s", a.id);
      	while (1)
      	{
      		if (strcmp(a.id, b.id))//两个用户名不相等
      		{
      			if (!feof(pf))//没读到文件末尾
      			{
      				fread(&b, sizeof(Users), 1, pf);//继续读取文件中的用户到b中
      			}
      			else//读到文件末尾了,确认没有重复的id
      			{
      				break;
      			}
      		}
      		else//有两个用户名相等
      		{
      			printf("此用户名已存在在,请重新输入!\n");
      			Sleep(1000);
      			fclose(pf);//关闭文件
      			pf = NULL;//pf置空,避免野指针
      			return;
      		}
      	}
      	printf("请输入您的姓名>>");
      	scanf("%s", a.name);
      	printf("请输入您的性别>>");
      	scanf("%s", a.sex);
      	printf("请输入您的电话号码>>");
      	scanf("%s", a.phone);
      	printf("请输入您的密码>>");
      	Getpwd(a.pwd);//输入密码的函数,有掩盖功能,下面会介绍
      	printf("\n请再次确认您的密码>>");
      	Getpwd(tmp);
      	do
      	{
      		if (!strcmp(a.pwd, tmp))//两次密码相等
      		{
      			pf = fopen("users.dat", "ab");
      			fwrite(&a, sizeof(Users), 1, pf);
      			printf("\n账号注册成功,请登录!\n");
      			Sleep(500);
      			fclose(pf);
      			pf = NULL;
      			return;
      		}
      		else
      		{
      			printf("\n两次密码不匹配!请重新输入>>");
      			Getpwd(a.pwd);
      			printf("\n请再次确认>>");
      			Getpwd(tmp);
      		}
      	} while (1);
      }

       文件都是以二进制打开以二进制写入的,没别的原因,就是觉得帅!


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月28日