C語言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
包括
1.錄入班級(jí)成員信息
2.排序
3.修改學(xué)生信息
4.刪除指定學(xué)號(hào)學(xué)生
5.查找學(xué)生
6.添加財(cái)務(wù)信息
7.查詢?cè)敿?xì)表
8.顯示所有學(xué)生信息
9.退出
詳細(xì)事項(xiàng):本系統(tǒng)包括管理員登錄和普通同學(xué)登錄,兩種登錄方式的權(quán)限不一樣,例如:同學(xué)登錄只能修改自己學(xué)號(hào)的信息。初次使用(本地文件為空)需要初始化系統(tǒng)。每次使用完一個(gè)功能,會(huì)自動(dòng)返回主函數(shù)。使用時(shí)需要注意本地文件是否齊全,包括:student.txt(儲(chǔ)存學(xué)生信息),account.txt(儲(chǔ)存財(cái)務(wù)信息),zh1.txt(儲(chǔ)存賬戶信息),zh2.txt(儲(chǔ)存賬戶信息),file2.txt(儲(chǔ)存密碼信息),file1.txt(儲(chǔ)存密碼信息)。本代碼使用鏈表和文件系系統(tǒng)。本代碼只是抱磚引玉。
/*首次使用,進(jìn)行系統(tǒng)初始化 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#include<windows.h>
#include<conio.h>
char password[9]; //記錄密碼
char password2[9]; //記錄密碼
int log; //登錄狀態(tài)函數(shù)
int ac;
struct student
{
char num[15]; //學(xué)號(hào)
char name[20]; //姓名
char sex; //性別
int age; //年齡
int clas; //班級(jí)
char mail[20]; //郵箱
char number[13]; //電話號(hào)碼
};
typedef struct node{ //定義一個(gè)結(jié)構(gòu)體
struct student data;
struct node *next;
}s;
void in(s *head); //信息的讀取
void menu(); //菜單函數(shù)
void add(s *head); //錄入函數(shù)
void dele(s *head); //刪除函數(shù)
void mod(s *head); //修改函數(shù)
void query(s *head); //查詢函數(shù)
void sort(s *head); //排序函數(shù)
void account(); //財(cái)務(wù)收入
void print() ; //顯示總財(cái)務(wù)
void printall(); //顯示所有學(xué)生信息
void out(s *head); //信息的存儲(chǔ)
void in(s *head)
{
FILE *fp;
s *p;
fp = fopen("student.txt","r");
while (!feof(fp))
{
p= (s*)malloc(sizeof(s));
fscanf(fp,"%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,&p->data.sex,&p->data.age,&p->data.clas,p->data.mail,p->data.number);
p->next=NULL;
s *last=head->next;
if(last!=NULL){ //當(dāng)鏈表不為空時(shí) ,才可以讓last=head
while(last->next){ //當(dāng)last不為空時(shí) ,當(dāng)while結(jié)束時(shí),這個(gè)last指向的就是最后一個(gè)結(jié)點(diǎn)
last=last->next;
}
last->next=p;
}else{
head->next=p; //鏈表為空
}
}
fclose(fp);
}
void out(s *head)
{
s *p;
FILE *fp;
if((fp=fopen("student.txt","w"))==NULL){
printf("File open error!\n");
exit(0);
}
for(p=head->next;p;p=p->next) //把學(xué)生信息存進(jìn)文件中
fprintf(fp,"%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
fclose(fp);
}
void menu()
{
char ch[6],*m,ch2;
system("cls"); /*實(shí)現(xiàn)清屏操作,即清除之前輸入的東西*/
s *head=(s*)malloc(sizeof(s));
head->next=NULL;
int i;
if(log==1)
{
printf("1.錄入班級(jí)成員信息\n");
printf("2.排序\n");
printf("3.修改學(xué)生信息\n");
printf("4.刪除指定學(xué)號(hào)學(xué)生\n");
printf("5.查找學(xué)生\n");
printf("6.添加財(cái)務(wù)信息\n");
printf("7.查詢?cè)敿?xì)表\n");
printf("8.顯示所有學(xué)生信息\n");
printf("9.退出\n");
for(i=1;i<=50;i++) //分割線
printf("-");
printf("\n請(qǐng)選擇(可多選):");
scanf("%s",ch);
m=ch;
for(;*m!='\0';m++) //用數(shù)組指針實(shí)現(xiàn)多函數(shù)操作
{
switch(*m){
case '1':system("cls");add(head);break;
case '2':system("cls");sort(head);break;
case '3':system("cls");mod(head);break;
case '4':system("cls");dele(head);break;
case '5':system("cls");query(head);break;
case '6': account();break;
case '7': print();break;
case '8':printall();break;
case '9':exit(0);
}
}
system("cls");
}
if(log==2)
{
printf("因?yàn)闄?quán)限問題,您只能使用一下功能\n");
printf("3.修改學(xué)生信息\n");
printf("4.查詢信息\n");
printf("6.添加財(cái)務(wù)信息\n");
printf("7.查詢?cè)敿?xì)表\n");
printf("8.顯示所有學(xué)生信息\n");
printf("9.退出\n");
for(i=1;i<=50;i++) //分割線
printf("-");
printf("\n請(qǐng)選擇(可多選):");
scanf("%s",ch);
m=ch;
for(;*m!='\0';m++) //用數(shù)組指針實(shí)現(xiàn)多函數(shù)操作
{
switch(*m){
case '3':system("cls");mod(head);break;
case '4':system("cls");dele(head);break;
case '6': account();break;
case '7': print();break;
case '8':printall();break;
case '9':return;
}
}
system("cls");
}
}
void add(s *head)
{ //錄入函數(shù)
FILE *fp;
int i,temp=0,sum; //temp用來標(biāo)記郵箱 sum用來標(biāo)記電話號(hào)碼的位數(shù)
int x;
system("cls");
s *p;
do{
p=(s*)malloc(sizeof(s)); //申請(qǐng)一個(gè)內(nèi)存;
printf("請(qǐng)輸入學(xué)號(hào):\n");
scanf("%s",p->data.num); //獲取學(xué)號(hào)
s *q;
q=head->next; //指針指向下一個(gè)
while(q!=NULL){ //p已經(jīng)指向尾部了,所以要定義一個(gè)別的指針來做for循環(huán)遍歷
if(strcmp(p->data.num,q->data.num)==0){
getchar();
printf("學(xué)號(hào)重復(fù),請(qǐng)重新輸入:\n");
scanf("%s",p->data.num);
}
q=q->next;
}
getchar();
printf("\n請(qǐng)輸入姓名:\n");
scanf("%s",p->data.name);
getchar();
printf("\n請(qǐng)輸入性別(男生填m,女生填w):\n");
scanf("%c",&p->data.sex);
while(1){
if((p->data.sex=='w')||(p->data.sex=='m'))
break;
else{
getchar(); //要在每一項(xiàng)輸入之后,讀入任意一個(gè)字符才能下一步操作
printf("性別符號(hào)輸入錯(cuò)誤,請(qǐng)重新輸入:\n"); //防止出入其他符號(hào)
scanf("%c",&p->data.sex);
}
}
getchar();
printf("\n請(qǐng)輸入年齡:\n");
scanf("%d",&p->data.age);
getchar();
printf("\n請(qǐng)?zhí)钊氚嗉?jí),僅數(shù)字:\n");
scanf("%d",&p->data.clas);
getchar();
printf("\n請(qǐng)輸入郵箱(必須有@):\n");
scanf("%s",p->data.mail);
while(1){
for(i=0;p->data.mail[i]!='\0';i++){
if(p->data.mail[i]=='@'){
temp=1;
}
}
if(temp==0){
printf("郵箱中不包含@,請(qǐng)重新輸入:\n");
scanf("%s",p->data.mail);
}else break;
}
getchar();
printf("\n請(qǐng)輸入電話號(hào)碼,必須是11位:\n");
scanf("%s",p->data.number);
while(1){
sum=0;
for(i=0;p->data.number[i]!='\0';i++){
sum+=1;
}
if(sum!=11){
getchar();
printf("號(hào)碼位數(shù)超過11位或者少于11位,請(qǐng)重新輸入:\n");
scanf("%s",p->data.number);
}else break;
}
p->next=NULL;
s *last=head->next;
if(last!=NULL){ //當(dāng)鏈表不為空時(shí) ,才可以讓last=head
while(last->next){ //當(dāng)last不為空時(shí) ,當(dāng)while結(jié)束時(shí),這個(gè)last指向的就是最后一個(gè)結(jié)點(diǎn)
last=last->next;
}
last->next=p;
}else{
head->next=p; //鏈表為空
}
getchar();
printf("\n是否還要繼續(xù)錄入,是請(qǐng)輸入1,否請(qǐng)輸入0\n");
scanf("%d",&x);
if(x==0) break;
if(x==1)
system("cls"); //清空屏幕
}while(1);
if((fp=fopen("student.txt","a"))==NULL){
printf("File open error!\n");
exit(0);
}
for(p=head->next;p;p=p->next) //把學(xué)生信息存進(jìn)文件中
fprintf(fp,"%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
fclose(fp);
printf("\n信息已經(jīng)存入文件\n");
system("pause");
s *k;
p=head->next;
while(p!=NULL){ //清空鏈表,只剩head,方便之后的操作
k=p->next;
free(p);
p=k;
}
head->next=NULL;
if(x==0)
menu();
}
void dele(s *head)
{ //刪除函數(shù)
int temp=0,i,flag2;
in(head); //信息的讀取
s *p,*q;
char numb[15];
FILE *fpw=fopen("tmp.txt","w");
char ch1;
ch1='-';
system("cls");
printf("請(qǐng)輸入學(xué)號(hào):");
scanf("%s",numb);
for(q=head,p=head->next;p;q=p,p=p->next){ //遍歷鏈表,條件是p存在
if(strcmp(numb,p->data.num)==0){
temp=1;
system("cls");
printf("學(xué)生信息如下:");
printf("學(xué)號(hào):%s\n",p->data.num);
printf("姓名:%s\n",p->data.name);
printf("性別:%c\n",p->data.sex);
printf("年齡:%d\n",p->data.age);
printf("班級(jí):%d\n",p->data.clas);
printf("郵箱:%s\n",p->data.mail);
printf("電話號(hào)碼:%s\n",p->data.number);
for(i=1;i<=50;i++){ //分割線
printf("%c",ch1);
}
printf("\n");
printf("是否要?jiǎng)h除此學(xué)生信息?(1或2)\n");
scanf("%d",&flag2);
if(flag2==2)
{
printf("取消刪除,三秒后返回主菜單");
Sleep(3000);
menu();
}
if(flag2==1){
if(q){
q->next=p->next; //將前一個(gè)指針指向要?jiǎng)h除的后一個(gè)結(jié)點(diǎn)
out(head);
}
else{
head->next=p->next;
out(head);
}
free(p);
printf("信息已刪除");
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
}
}
if(temp==1){ //如果temp等于一說明信息已經(jīng)刪除,把改過后的鏈表重新寫入文件中
out(head);
}
if(temp==0){ //沒有找到學(xué)生的信息
for(i=1;i<=50;i++)
printf("%c",ch1);
printf("\n沒有找到此學(xué)生信息,按任意鍵退出\n");
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
s *k;
p=head->next;
while(p!=NULL){ //清空鏈表,只剩head,方便之后的操作
k=p->next;
free(p);
p=k;
}
head->next=NULL;
}
void mod(s *head)
{ //修改函數(shù)
int nums;
FILE *fp;
system("cls"); //清空屏幕
s *p,*q; //作為鏈表中的指針
in(head);
char *m; //用來控制修改的信息編號(hào)
int temp=0;
int i,sui,ban,j=1;//代表修改的年齡班級(jí)
char num1[15];
char ch[8];
char xuehao[15],ming[20],xingbie,youxiang[20],haoma[20];//代表要修改的信息名
printf("請(qǐng)輸入要修改的學(xué)生的學(xué)號(hào):\n");
getchar();
scanf("%s",num1);
nums= atoi(num1);
// printf("%d",nums);
if(log==2)
{
if(nums != ac)
{
while(j)
{
printf("您只能修改自己的信息,請(qǐng)輸入正確信息");
scanf("%s",num1);
nums= atoi(num1);
if(ac==nums)
{
j=0;
}
}
}
}
for(p=head->next;p;p=p->next){ //遍歷列表,尋找與輸入相同的學(xué)號(hào)
if(strcmp(num1,p->data.num)==0){
temp=1; //找到信息后的標(biāo)記
printf("1.學(xué)號(hào):%s\n",p->data.num); //找到后顯示出完整信息
printf("2.姓名:%s\n",p->data.name);
printf("3.年齡:%d\n",p->data.age);
printf("4.班級(jí):%d\n",p->data.clas);
printf("5.郵箱:%s\n",p->data.mail);
printf("6.電話號(hào)碼:%s\n",p->data.number);
printf("0.退出\n");
for(i=1;i<=50;i++){ //分割線
printf("-");
}
printf("\n");
printf("請(qǐng)輸入要修改信息的相應(yīng)序號(hào)(可多選):\n");
scanf("%s",ch);
getchar();
m=ch;
for(;*m!='\0';m++){ //用循環(huán)來解決修改多個(gè)學(xué)生信息的問題
switch(*m){
case '1':printf("請(qǐng)輸入要修改學(xué)號(hào)的內(nèi)容:\n");
scanf("%s",xuehao);
strcpy(p->data.num,xuehao);break;
case '2':printf("\n請(qǐng)輸入要修改姓名的內(nèi)容:\n");
scanf("%s",ming);
strcpy(p->data.name,ming);break;
case '3':printf("\n請(qǐng)輸入要修改年齡的內(nèi)容:\n");
scanf("%d",&sui);
p->data.age=sui;break;
case '4':printf("\n請(qǐng)輸入要修改班級(jí)的內(nèi)容:\n");
scanf("%d",&ban);
p->data.clas=ban;break;
case '5':printf("\n請(qǐng)輸入要修改郵箱的內(nèi)容:\n");
scanf("%s",youxiang);
strcpy(p->data.mail,youxiang);break;
case '6':printf("\n請(qǐng)輸入要修改電話號(hào)碼的內(nèi)容:\n");
scanf("%s",haoma);
strcpy(p->data.number,haoma);break;
case '0':break;
}
}
getchar();
printf("修改后的信息如下:\n");
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);//輸出修改后的信息
system("pause");//防止閃屏
}
}
if(temp==1){ //如果temp等于一說明信息已經(jīng)刪除,把改過后的鏈表重新寫入文件中
out(head);
}
if(temp==0){ //沒找到學(xué)生信息
printf("沒有此學(xué)生的信息\n");
system("pause");
}
s *k;
p=head->next;
while(p!=NULL){ //清空鏈表,只剩head,方便之后的操作
k=p->next;
free(p);
p=k;
}
head->next=NULL;
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
void query(s *head)
{ //查詢函數(shù)
s *p; //p用來遍歷查找的內(nèi)容
in(head);
p=head->next;
system("cls");
int i,sui,ban,temp=0; //temp用來標(biāo)記是否找到信息
char ch;
char xuehao[15],ming[20],xingbie,youxiang[20],haoma[20]; //用來輸入查找的信息
printf("1.學(xué)號(hào)\n");
printf("2.姓名\n");
printf("3.年齡\n");
printf("4.班級(jí)\n");
printf("5.郵箱\n");
printf("6.電話號(hào)碼\n");
printf("7.顯示所有學(xué)生的信息\n");
printf("0.退出\n");
for(i=1;i<=50;i++){
printf("-"); //分割線
}
printf("\n");
printf("請(qǐng)選擇輸入要查詢的信息編號(hào):\n");
getchar();
ch=getchar();
if(ch=='1'){
getchar();
printf("請(qǐng)輸入要查找的信息內(nèi)容:\n");
scanf("%s",xuehao);
temp=1;
while(p){
if(strcmp(xuehao,p->data.num)==0){ //找到的話輸出
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='2'){
getchar();
printf("請(qǐng)輸入要查找的信息內(nèi)容:\n");
scanf("%s",ming);
temp=1;
while(p){
if(strcmp(ming,p->data.name)==0){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='3'){
getchar();
printf("請(qǐng)輸入要查找的信息內(nèi)容:\n");
scanf("%c",&xingbie);
temp=1;
while(p){
if(xingbie==p->data.sex){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='4'){
getchar();
printf("請(qǐng)輸入要查找的信息內(nèi)容:\n");
scanf("%d",&sui);
temp=1;
while(p){
if(sui==p->data.age){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='5'){
getchar();
printf("請(qǐng)輸入要查找的信息內(nèi)容:\n");
scanf("%d",&ban);
temp=1;
while(p){
if(ban==p->data.clas){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='6'){
getchar();
printf("請(qǐng)輸入要查找的信息內(nèi)容:\n");
scanf("%s",youxiang);
temp=1;
while(p){
if(strcmp(youxiang,p->data.name)==0){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='7'){
getchar();
printf("請(qǐng)輸入要修查找的信息內(nèi)容:\n");
scanf("%s",haoma);
temp=1;
while(p){
if(strcmp(haoma,p->data.name)==0){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
}
p=p->next;
}
}
if(ch=='8'){
getchar();
temp=1;
while(p){
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
system("pause");
p=p->next;
}
}
if(temp==0)
{
printf("沒有找到此學(xué)生的信息\n");
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
s *k;
p=head->next;
while(p!=NULL){ //清空鏈表,只剩head,方便之后的操作
k=p->next;
free(p);
p=k;
}
head->next=NULL;
printf("查詢完畢\n");
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
void sort(s *head)
{ //排序函數(shù)
system("cls"); //清空屏幕
s *p,*q;
in(head);
q=head;
p=head->next;
s *w;
w=head->next;
char ch;
printf("請(qǐng)輸入要排序的內(nèi)容(1是學(xué)號(hào)、2是年齡):\n");
getchar();
scanf("%c", &ch);
if (ch == '1'){
s *temp = (s*)malloc(sizeof(s));
while (p != NULL)
{
while (p->next != NULL) //按照學(xué)號(hào)大小排序
{
if (strcmp(p->data.num, p->next->data.num)<0)
{
temp->data = p->data;
p->data = p->next->data;
p->next->data = temp->data;
}
p = p->next;
}
p = q->next;
q = p;
}
}
else{
s *temp = (s*)malloc(sizeof(s));
while (p != NULL)
{
while (p->next != NULL) //按照年齡大小排序
{
if (p->data.age < p->next->data.age)
{
temp->data = p->data;
p->data = p->next->data;
p->next->data = temp->data;
}
p = p->next;
}
p = q->next;
q = p;
}
}
printf("\n排序后的信息如下:\n");
while (w != NULL){ //將排序后的鏈表輸出
printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",w->data.num,w->data.name,w->data.sex,w->data.age,w->data.clas,w->data.mail,w->data.number);
w = w->next;
}system("pause");
out(head);
s *k;
p=head->next;
while(p!=NULL){ //清空鏈表,只剩head,方便之后的操作
k=p->next;
free(p);
p=k;
}
head->next=NULL;
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
void account()
{
int n;
char date[25];
char item[40];
char s1[45];
char count[12];
FILE *fp;
if((fp=fopen("account.txt","at"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("請(qǐng)輸入次數(shù)");
scanf("%d",&n);
while(n)
{
printf("請(qǐng)輸入姓名\n");
scanf("%s",&s1);
fputs(s1,fp);
printf("請(qǐng)輸入日期\n");
scanf("%s",&date);
fputs(date,fp);
printf("請(qǐng)輸入名稱\n");
scanf("%s",&item);
fputs(item,fp);
printf("請(qǐng)輸入金額");
scanf("%s",&count);
fputs(count,fp);
n--;
}
fclose(fp);
printf("三秒后返回主菜單");
Sleep(3000);
menu();
}
void print()
{ //打印所有財(cái)務(wù)數(shù)據(jù)
char str[10000];
FILE *fp;
int qq;
if((fp=fopen("account.txt","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
fgets(str,1000,fp); //獲取文件內(nèi)容
printf("%s",str); //打印內(nèi)容
printf("\n");
printf("1返回主菜單");fclose(fp); //關(guān)閉文件
scanf("%d",&qq);
if(qq==1)
{
menu();
}
}
void printall()
{ //打印所有是學(xué)生信息函數(shù)
char str[1000];
FILE *fp;
int qq;
if((fp=fopen("student.txt","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1); //找不到文件退出程序
}
while((fgets(str,1024,fp))!=NULL)
{
printf(str);
} //打印內(nèi)容
fclose(fp); //關(guān)閉文件
printf("1返回主菜單");
scanf("%d",&qq);
if(qq==1)
{
menu();
}
}
void first()
{ //讀取文件
FILE *fp,*fp1; /*定義文件指針*/
char s[9],s1[9],s2[9],s3[9],ch,n;
int i;
ch='_';
if((fp=fopen("file.txt","r"))==NULL)
{
printf("\n 請(qǐng)進(jìn)行初始化操作!\n");
for(i=1;i<=50;i++)/*用來做分割線*/
printf("%c",ch);
getch(); /*是輸入一個(gè)字符,但不顯示在屏幕上*/
do{
printf("\n 設(shè)置密碼,不得超過八位數(shù) \n");
for(i=0;i<8&&((s[i]=getch())!=13);i++) /*13代表的是回車*/
putch('*'); /*顯示字符*/
printf("\n 再確認(rèn)一次密碼 \n");
for(i=0;i<8&&((s1[i]=getch())!=13);i++)
putch('*');
s[i]='\0';
s1[i]='\0';
if(strcmp(s,s1)!=0) /*判斷兩次密碼輸入是否一致*/
printf("\n 兩次密碼輸入不一致,請(qǐng)重新輸入 \n");
else break;
} while(1); /*當(dāng)括號(hào)里是1時(shí)表示無限循環(huán)*/
if((fp1=fopen("file.txt","w"))==NULL){
printf("\n 系統(tǒng)創(chuàng)建失敗,請(qǐng)按任意鍵退出 \n"); /*打開文件,把密碼存進(jìn)去*/
getch();
exit(1);
}
for(i=0;s[i]!='\0';i++)
putw(s[i],fp1); /*將數(shù)組元素(即密碼)放入文件中*/
fclose(fp1); /*關(guān)閉文件*/
printf("\n 系統(tǒng)初始化成功,按任意鍵退出后,再重新進(jìn)入 \n");
getch();
exit(1);
}
else{
i=0;
while(!feof(fp)&&i<8)
s2[i++]=getw(fp); /*從文件讀出字符賦給數(shù)組*/
s2[i]='\0';
strcpy(password,s2); /*將數(shù)組s2的字符復(fù)制給password*/
// enroll();
}
if((fp=fopen("file2.txt","r"))==NULL)
{
printf("\n 請(qǐng)進(jìn)行初始化操作!\n");
for(i=1;i<=50;i++)/*用來做分割線*/
printf("%c",ch);
getch(); /*是輸入一個(gè)字符,但不顯示在屏幕上*/
do{
printf("\n 設(shè)置密碼,不得超過八位數(shù) \n");
for(i=0;i<8&&((s[i]=getch())!=13);i++) /*13代表的是回車*/
putch('*'); /*顯示字符*/
printf("\n 再確認(rèn)一次密碼 \n");
for(i=0;i<8&&((s1[i]=getch())!=13);i++)
putch('*');
s[i]='\0';
s1[i]='\0';
if(strcmp(s,s1)!=0) /*判斷兩次密碼輸入是否一致*/
printf("\n 兩次密碼輸入不一致,請(qǐng)重新輸入 \n");
else break;
} while(1); /*當(dāng)括號(hào)里是1時(shí)表示無限循環(huán)*/
if((fp1=fopen("file2.txt","w"))==NULL){
printf("\n 系統(tǒng)創(chuàng)建失敗,請(qǐng)按任意鍵退出 \n"); /*打開文件,把密碼存進(jìn)去*/
getch();
exit(1);
}
for(i=0;s[i]!='\0';i++)
putw(s[i],fp1); /*將數(shù)組元素(即密碼)放入文件中*/
fclose(fp1); /*關(guān)閉文件*/
printf("\n 系統(tǒng)初始化成功,按任意鍵退出后,再重新進(jìn)入 \n");
getch();
exit(1);
}
else{
i=0;
while(!feof(fp)&&i<8)
s3[i++]=getw(fp); /*從文件讀出字符賦給數(shù)組*/
s2[i]='\0';
strcpy(password2,s3); /*將數(shù)組s2的字符復(fù)制給password*/
}
// enroll();
}
void enroll()
{ //登錄函數(shù)
int flag=0;
int i,n=5;
char str[9];
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf(" ---------------------------------------------------------------- \n");
printf(" | 歡迎使用財(cái)務(wù)管理系統(tǒng) | \n");
printf(" | | \n");
printf(" | 請(qǐng)選擇登錄方式:1管理員登錄 2班級(jí)成員登錄 | \n");
printf(" ---------------------------------------------------------------- \n");
if(getch()=='1')
{
log=1;
}else
{
log=2;
}
switch(log)
{
case 1:
printf("請(qǐng)輸入賬號(hào)\n");
scanf("%d",&ac);
while(n)
{
printf("\n");
printf("請(qǐng)輸入密碼");
for(i=0;i<8&&((str[i]=getch())!=13);i++)
putch(str[i]); //獲取鍵盤輸入的內(nèi)容
str[i]='\0';
for(int j=0;j<i;j++)
{
if(str[j]!=password[j])
{
flag=1; //判斷輸入的密碼和本地文件內(nèi)的密碼是否相同
}
else{
flag=0;
}
}
if(flag)
{
printf("輸入錯(cuò)誤密碼");
n--; //密碼錯(cuò)誤可用次數(shù)減一
}
if(flag==0)
{
break; //密碼正確退出循環(huán)
}
}
if(n=0 )
{
printf("你輸入五次錯(cuò)誤密碼,請(qǐng)退出");
getch();
exit(1); /*非正常運(yùn)行導(dǎo)致退出程序*/
}
break;
case 2:
printf("請(qǐng)輸入賬號(hào)\n");
scanf("%d",&ac);
while(n)
{
printf("\n");
printf("請(qǐng)輸入密碼");
for(i=0;i<8&&((str[i]=getch())!=13);i++)
putch(str[i]); //獲取鍵盤輸入的內(nèi)容
str[i]='\0';
for(int j=0;j<i;j++)
{
if(str[j]!=password2[j])
{
flag=1; //判斷輸入的密碼和本地文件內(nèi)的密碼是否相同
}
else{
flag=0;
}
}
if(flag)
{
printf("你輸入錯(cuò)誤密碼");
n--; //密碼錯(cuò)誤可用次數(shù)減一
}
if(flag==0)
{
break; //密碼正確退出循環(huán)
}
}
if(n=0)
{
printf("你輸入五次錯(cuò)誤密碼,請(qǐng)退出");
getch();
exit(1); /*非正常運(yùn)行導(dǎo)致退出程序*/
}
break;
default: printf("您輸入了無效數(shù)字");
break;
}
}
int main()
{
first(); //啟動(dòng)初始化函數(shù)
enroll(); //啟動(dòng)登錄函數(shù)
menu(); //啟動(dòng)菜單函數(shù)
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++?OpenCV實(shí)戰(zhàn)之車道檢測(cè)
這篇文章主要介紹了基于C++?OpenCV實(shí)現(xiàn)的車道檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解
今天小編就為大家分享一篇關(guān)于整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02
C++實(shí)現(xiàn)插入排序?qū)φ麛?shù)數(shù)組排序
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)插入排序?qū)φ麛?shù)數(shù)組排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
C語言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要介紹了C語言學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

