#include
#include
#include
#define bool char
#define true 1
#define false 0
#define NUM 100
// IC卡账户信息
struct cardInfo
{
char sno[20]; // 学号
char name[20]; // 姓名
char cardID[12]; // 卡号
float balance; // 余额
};
// 函数声明
bool login();
voID menu(); // 主菜单
voID openAccount(); // 开户
voID showCardInfo(struct cardInfo card); // 显示账户信息的方法
voID showCardInfos(struct cardInfo cards[],int count);
voID vIEw(); // 显示所有账户信息
voID income(); // 充值
voID init(); // 初始化
voID saveData(); // 保存数据
voID search(); // 查找
struct cardInfo cards[NUM]; // 用来存放所有的账户信息
int TOTALCOUNT = 0; // 记录数
bool isEnd = false; // 是否退出系统
voID main()
{
bool bl = 0;
int count = 0; // 用户记录输入输入账号和密码的次数,最多允许输入3次
do
{
if (count == 3)
{
break; // 跳出while循环
}
if (count > 0)
{ // 说明不是第一次登陆
printf("nnt账号或密码错误,请确认后重新登录...");
printf("nnt您还有 %d 次机会<请按回车继续>",3-count);
getch();
}
count++;
bl = login(); // 调用登陆的方法,实现用户登陆
}while( !bl );
// 问题:当用户登陆成功也会跳出while,如果超过3次也会跳出while
if ( !bl )
{
printf("nnt对不起,您暂无权限...nt");
system("exit");
} else // 登陆成功
{
init(); // 初始化数据,即将数据从数据文件读取到系统中
do{
menu(); // 显示主菜单
}while(!isEnd);
}
printf("nnt");
exit;
system("exit /B");
}
// 主菜单
voID menu()
{
int flag = 0 ;
system("cls");
printf("nt**********************湖南工学院IC卡管理系统**********************");
printf("nt************************** 1. IC卡开户 **************************");
printf("nt************************** 2. 查询IC卡信息 ***********************");
printf("nt************************** 3. 浏览IC卡信息 ***********************");
printf("nt************************** 4. IC卡充值 ************************");
printf("nt************************** 5. 修改IC卡信息 ***********************");
printf("nt************************** 6. 退出系统 ************************");
printf("nnt请选择您要进行的 *** 作(1-6):");
scanf("%d",&flag);
switch(flag)
{
case 1:openAccount(); break;
case 2:search(); break;
case 3:vIEw(); break;
case 4:income(); break;
case 5: break;
case 6:saveData(); isEnd=true; break;
default:break;
}
}
// 用户登录方法
bool login()
{
char name[20]; // 存储用户输入的账号
char pwd[20],ch; // 存储用户输入的密码
int index = 0; // 输入密码的位数
system("cls");
printf("nt**********************湖南工学院IC卡管理系统**********************");
printf("nnt请输入您的账号:");
// 获取用户输入的账号
scanf("%s",name);
printf("nt请输入您的密码:");
// 获取用户输入的密码
while ( (ch=getch()) != 13 ) // 不是回车键
{
if ( ch ==8 ) // 如果是退格 Backspace
{
if(index <= 0)
{
index = 0;
}
else
{
printf("b b");
index --;
}
}
else
{
pwd[index++] = ch;
putch('*');
}
}
pwd[index] = '';
//scanf("%s",pwd); // 当用户输入密码时,如何用掩码的方式显示 ***
// 比较用户输入的账号和密码是否正确。如果用户输入的账号是yc 并且密码是 123321,则认为是合法的用户,那么跳转到主界面,否则提示错误。
if ( strcmp("yc",name) == 0 && strcmp("123321",pwd) == 0)
{
return true;
} else
{
return false;
}
}
// 开户
voID openAccount()
{
struct cardInfo card; // 声明结构体变量
int result;
file *fp; // 声明一个文件指针,用来指向打开的这个文件
system("cls");
printf("nt**********************湖南工学院IC卡管理系统**********************");
printf("nt************************** IC卡开户 **************************");
printf("nt*********************** 请输入以下信息 ************************");
printf("nnt请输入学号:");
scanf("%s",card.sno);
printf("nt请输入卡号:");
scanf("%s",card.cardID);
printf("nt请输入姓名:");
scanf("%s",card.name);
printf("nt请输入充值金额:");
scanf("%f",&card.balance);
printf("nnt您输入的信息为:");
showCardInfo(card);
result = MessageBox(NulL,"您确定要添加此账号信息吗?","确认提示",MB_YESNO|MB_ICONinformatION);
if (result == 6) // 说明确定添加
{
strcpy(cards[TOTALCOUNT-1].sno,card.sno);
strcpy(cards[TOTALCOUNT-1].cardID,card.cardID);
strcpy(cards[TOTALCOUNT-1].name,card.name);
cards[TOTALCOUNT-1].balance = card.balance;
TOTALCOUNT++;
// 将这个数据写入到数据文件
/*
打开一个数据文件
fopen(要打开的数据文件路径,打开的方式);
*/
fp = fopen("cards.txt","a"); // 以追加的方式打开文件
/*
将要保存的数据写入到这个打开的文件中
fwrite() 写入数据到指定文件中,它里面包含四个参数
第一个参数:要写入数据文件的数据的地址 -> 要将用户输入的这个IC卡账号信息写入到数据文件 -> 即这个账号结构体的地址
第二个参数:要写入数据文件的数据的大小 -> 要将这个结构体数据写入到数据文件,所以我要写入的数据文件大小应该就是这个结构体大小
第三个参数:要写入几个这个的大小 -> 这里我们只需要保存一个IC卡账户信息
第四个参数:写入到那个数据文件 -> 这里是写入到我们打开的这个数据文件fp
*/
fwrite(&card,sizeof(struct cardInfo),1,fp);
// 关闭文件
fclose(fp);
printf("nnt卡户成功<请按回车键返回>nnt");
}
else
{
printf("nnt不添加nnt");
}
}
// 用来显示指定的账户信息
voID showCardInfo(struct cardInfo card)
{
printf("nnt 卡号 tt 学号 tt学生姓名 tt 余额 ");
printf("nt%-15st%-12st%-20st%-6.2ft",card.cardID,card.sno,card.name,card.balance);
printf("nnt");
}
// 浏览账户信息
voID vIEw()
{
system("cls");
printf("nt**********************湖南工学院IC卡管理系统**********************");
printf("nt************************ 浏览账户信息 ************************");
if (TOTALCOUNT>0)
{
// 显示数据
showCardInfos(cards,TOTALCOUNT);
printf("nnt<请按回车返回>");
}
else
{
printf("nnt暂无账号信息<请按回车返回>");
}
getch();
}
// 显示单个账户信息
voID showCardInfos(struct cardInfo cards[],int count)
{
int i = 0;
printf("nnt 卡号 tt 学号 tt学生姓名 tt 余额 ");
for(i; i { printf("nt%-15st%-12st%-20st%-6.2ft",cards[i].cardID,cards[i].sno,cards[i].name,cards[i].balance); } printf("nnnt************************ 共 %d 条数据 ************************",count-1); printf("nnt"); } // 初始化系统,用来读取本系统中的数据所有数据 voID init() { file *fp; if ( (fp = fopen("cards.txt","r") ) != NulL) { // 循环读取数据到结构体数组中 while( !feof(fp) ) // feof file end of: 到文件最后了吗 { /* fread() 用来从指定的数据文件读取数据 第一个参数:将数据读到哪里 -> 将数据从数据文件读到结构体数据中 第二个参数:每个读多大 -> 每次读取一个结构体那么大 第三个参数:每次读几个这样的大小 第四个参数:从哪里读 -> 从打开的数据文件中读 */ fread(&cards[TOTALCOUNT],fp); TOTALCOUNT++; } fclose(fp); } } // 充值 voID income() { char cardID[12]; // 用来存放用户输入的充值卡卡号 int i = 0; float money; system("cls"); printf("nt**********************湖南工学院IC卡管理系统**********************"); printf("nt************************ 账户充值中心 ************************"); // 先判断系统中有没有用户信息 if (TOTALCOUNT > 0) { printf("nnt请输入要充值的卡号:"); scanf("%s",cardID); // 从系统中查找有没有这个卡号 for (i=0; i { if (strcmp(cardID,cards[i].cardID) == 0) { // 如果是相等的,则说明这个用户找到了 // 显示这个账号,然后提醒输入输入充值的金额 printf("nnt您要充值的账户信息如下:"); showCardInfo(cards[i]); printf("nnt请输入充值金额:"); scanf("%f",&money); // 修改此账户的余额 cards[i].balance += money; // 将数据写入到数据文件 printf("nnt充值成功<请按回车键返回>"); break; } } // 第一种是找到了退出循环,第二种是没找到退出循环 if ( i >= TOTALCOUNT-1 ) { printf("nnt暂无该账号信息<请按回车返回>"); } } else { printf("nnt暂无账号信息<请按回车返回>"); } getch(); } // 保存数据 voID saveData() { file *fp; int i = 0; if (TOTALCOUNT > 0) { // 说明有数据要保存 fp = fopen("cards.txt","w"); // 以追加的方式打开文件 /* 将要保存的数据写入到这个打开的文件中 fwrite() 写入数据到指定文件中,它里面包含四个参数 第一个参数:要写入数据文件的数据的地址 -> 要将用户输入的这个IC卡账号信息写入到数据文件 -> 即这个账号结构体的地址 第二个参数:要写入数据文件的数据的大小 -> 要将这个结构体数据写入到数据文件,所以我要写入的数据文件大小应该就是这个结构体大小 第三个参数:要写入几个这个的大小 -> 这里我们只需要保存一个IC卡账户信息 第四个参数:写入到那个数据文件 -> 这里是写入到我们打开的这个数据文件fp */ for(i=0; i { fwrite(&cards[i],fp); } // 关闭文件 fclose(fp); } else { remove("cards.txt"); } } // 查找 voID search() { char sno[20]; // 用来存放用户输入的充值卡卡号 int i=0,index = 0,len = 0,count = 0; bool isFind = false; // 是否找到 struct cardInfo cd[NUM]; // 满足条件的账户信息 system("cls"); printf("nt**********************湖南工学院IC卡管理系统**********************"); printf("nt************************ 账户查询中心 ************************"); // 先判断系统中有没有用户信息 if (TOTALCOUNT > 0) { printf("nnt请输入要查询的学生学号:"); scanf("%s",sno); // 从系统中查找有没有这个卡号 for (i=0; i { isFind = true; for(index=0,len=(int)strlen(sno); index { if(cards[i].sno[index] != sno[index] ) // 说明不匹配 { isFind = false; break; } } // 如果所有的字符都能匹配则满足条件 if (isFind) { cd[count] = cards[i]; count++; } } // 第一种是找到了退出循环,第二种是没找到退出循环 if ( count > 0) { printf("nnt满足条件的信息如下:"); showCardInfos(cd,count+1); } else { printf("nnt暂无该账号信息<请按回车返回>"); } } else { printf("nnt暂无账号信息<请按回车返回>"); } getch(); } 以上是内存溢出为你收集整理的C语言课设案例——IC卡充值管理系统全部内容,希望文章能够帮你解决C语言课设案例——IC卡充值管理系统所遇到的程序开发问题。 如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)