C语言程序设计:单词本整体框架实现

概述

索引文章中提到,本文进行的是单词本程序整体框架的代码编写,包括头文件及声明、主函数编写、主菜单编写等,话不多说,直接上代码:

头文件、声明等

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>
#define SIZE 1000
char mingzi[20];
char shuru[8];
void printInfo();
void Register();
void Loading();
void RegisterorLoading();
void Menu();
void Visit();
void Vocabulary();
void danciyulanordancixuexi();
void cuotiben();
void Exit();
void delword();
void addword();
void findword();

这边必须提醒大家的是,上述代码包含了整个单词本程序所有涉及到的需要进行声明的子函数、头文件等,并不是只对本文提到的主函数、主菜单函数等进行声明。

主函数编写

int main()
{
	RegisterorLoading();     //注册与登录界面
	Menu();                 //菜单界面
	Exit();                  //退出界面
	return 0;
}

为了提高代码的可读性,主函数中只进行子函数调用,所有功能都编写子函数实现。

登录/注册界面编写

1、注册/登录框架编写

void RegisterorLoading()      //注册与登录界面
{
     int i;                                  //选择登录或注册的变量
	printInfo();                       //窗口界面美观
	scanf("%d",&i);             
	system("cls");                   //清空已有窗口界面
    switch(i)
    { case 1 : Register(); getchar();getchar();                 //跳转注册或登录
	  case 2: Loading();system("cls"); break;
	}
}

其中“printInfo()”函数用于使界面较为美观,其源码如下:

void printInfo()           //界面外形框
{
	printf("\n\n\n\n\n");
	printf("\t                                     ***************************\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &         1.注册          &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &         2.登录          &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &                         &\n");
	printf("\t                                     &**************************\n\n");
}

“printInfo()”函数只是起到使界面美观的作用,笔者为了方便,只在最开始演示一次,如果大家对界面的美观度要求较高,可以照着上述代码对之后的代码做一点修改,就能达到相同的页面效果。

2、“注册”子函数编写

void Register()                        //用户名注册
{
	int dk=1;                        //打卡数
	char yonghuming1[20],mima1[8],mima2[8],mima3[8],mm[8];       //用户名,第一次设的密码,第一次确认的密码,第一次确认密码错误时第二次确认的密码,最终存入文件的密码。
	FILE *fp;
	fp=fopen("D:\\Ctext\\yonghushuju.txt","a+");
	if(!fp)
	{
		printf("file error\n");
		exit(1);
	};
    printf("请注册你的用户名:\n");
	scanf("%s",yonghuming1);
    printf("请输入密码:\n");
	scanf("%s",mima1);
    printf("请确认密码:\n");
	scanf("%s",mima2);
	if(!strcmp(mima1,mima2))               //如果第一次输入的密码与确认的密码一致则注册成功。
		   {
			 strcpy(mm,mima1);
			 printf("注册成功!");
			 
		   }
	else
		 {
			 printf("请再次确认密码:\n");
			 scanf("%s",mima3);
			 if(!strcmp(mima1,mima3))    //若第一次不一致则需第二次确认一致。
			 {
				 strcpy(mm,mima1);
				 printf("恭喜你,注册成功!\n");
			 }
	        else
				{ printf("注册失败!\n");getchar();getchar();    //密码两次确认不一致则注册失败直接退出。
			 exit(1);}
		 }
	fprintf(fp,"%s %s %d\n",yonghuming1,mm,dk);      //用户名与密码还有初始打卡数存入文件。
	fclose(fp);
}

3、“登录”子函数编写

void Loading()          //登录
{
	int ch=0;                   //中间变量,用来判断用户名是否存在。
	typedef struct yhsj      //定义结构体
		{
	char name[20];
	char password[8];
	int dkts;
		}sj;
	sj yhxx[1000]; //定义结构体数组,用来存储用户信息
	int i=0;      //循环变量
	FILE *fp;     //定义文件指针
	fp=fopen("D:\\Ctext\\yonghushuju.txt","r");//以只读的形式打开用户数据文件
	if(!fp)
		{
			printf("file error!\n");
			exit(1);
		}             //若打开失败,则退出程序
	printf("请输入用户名登录:\n");
	scanf("%s",mingzi);   //将用户输入的信息存储到字符数组中
	fscanf(fp,"%s%s%d",yhxx[i].name,yhxx[i].password,&yhxx[i].dkts);       
	while(!feof(fp))
		{
          i++;
		  fscanf(fp,"%s%s%d",yhxx[i].name,yhxx[i].password,&yhxx[i].dkts);
		}                  //将文件里所有的用户信息读入结构体
	fclose(fp);       //关闭文件
	for (i=0;i<1000;i++)
		{
			if(!strcmp(mingzi,yhxx[i].name))    //判断用户数据文件里是否有与之相配的用户名
			{
				ch=1;                               //若存在该用户名,则将ch赋值为1;
				printf("请输入密码:\n");
				scanf("%s",shuru);
				if(!strcmp(shuru,yhxx[i].password))   //将用户输入的密码与用户数据文件中的密码比对
					{printf("登录成功!(请按回车继续)\n");
						getchar();getchar();}           //停顿
				else
				{
					printf("密码错误,请重新输入:\n");
					scanf("%s",shuru);
					if(!strcmp(shuru,yhxx[i].password))         //再次进行密码比对
					{ printf("登录成功!(请按回车继续)\n");
						getchar();getchar();}
					else 
					{
						printf("输入错误次数过多,再见!\n");
						getchar();getchar();exit(1);         //密码输入次数超限,停顿后直接结束程序。
					}
				}
			}
		}
	if(ch==0)      //用户数据文件里找不到该用户名,引导进行用户注册
	{printf("无此用户名,请注册!\n");getchar();getchar();
		exit(1);}
}

主菜单编写

void Menu()
{

	int i;           //选择变量,用于后面做选择。
	do{
		    printf("主菜单\n");
			printf("1.查看单词本\n");
	        printf("2.编辑单词本\n");
	        printf("3.单词学习\n");	
			printf("4.查看错题集\n");	
			printf("0.退出\n");
			printf("请输入您的选择:");
			scanf("%d",&i);
			getchar();
			switch(i)         //菜单栏往下跳转
			{
			case 1: Visit();break;
			case 2:Vocabulary();break;
			case 3:danciyulanordancixuexi();break;
			case 4:cuotiben();break;
			case 0: Exit();
			default:printf("请输入正确的选择!\n");
			}

	}while(i);
}

效果图

主界面

主界面

“注册”功能

注册页面

“登录”功能

登录页面

跳转主菜单

主菜单

后记

至此,单词本程序的主菜单及整体框架已经基本编写完成,接下来将进行“查看单词本”功能的编写
————————————————————————
2021.03.24更新:刚刚看到自己上传的源码需要积分才能下载,enm如果大家没有积分的话,可以微信搜索我的个人公众号“茶迁”或者扫描下图,关注后在后台回复“单词本”,就可以直接拿到源码啦。我平时也会在公众号发一些编程相关的文章,欢迎大家关注~
茶迁

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保温杯拖把风扇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值