学习C语言有两个周了,基本语法都了解了,还有一些比较生疏,然后重新温习了一下数据结构,没有涉及到的是队列,图,树,排序中的归并排序和堆排序桶排序。
用了大概一天时间码了一个学生信息管理系统,比较粗糙,可能会有不少BUG,但这算是对我这段时间的一个总结把,
结束了windows下C编程,准备进入无GUI的命令行界面的Linux下的C编程,加油!
上代码
头文件定义
#ifndef ANDREW_LIU
#define ANDREW_LIU
#include<conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <Windows.h>
#define USR_PWD_LEN 20
#define USR_NAME_LEN 20
#define ROLE 5
typedef struct usr_account_tag
{
char usr_name[USR_NAME_LEN];
char usr_pwd[USR_PWD_LEN];
char usr_role[ROLE];
struct usr_account_tag *next ;
}USR_ACCOUNT, *pUSR_ACCOUNT;
typedef struct usr_infor_tag
{
int usr_id ;
char usr_name[USR_NAME_LEN] ;
int usr_course_id ;
double usr_course_score;
struct usr_infor_tag *next;
}USR_INFOR,*pUSR_INFOR;
pUSR_INFOR student;
pUSR_ACCOUNT account;
pUSR_ACCOUNT Account_build(); //建立账户链表 通过
void Role_confirm(pUSR_ACCOUNT account,char usrname[]);//账户名在链表中查找 通过
void show_normal_menu();//调用A权限界面 通过
void show_system_menu();//调用S权限界面 通过
void show_normal_search();//调用普通用户查询界面 通过
void show_system_search();//调用系统用户查询界面 通过
void GetPasswd(char *passwd);//密码验证
void Getname(char *usrname);//账户限制
void Register(pUSR_ACCOUNT *account);//注册账号 通过
pUSR_ACCOUNT Search_usr_account(pUSR_ACCOUNT *account, char search_name[]);//查询帐号信息 通过
void Update_usr_account(pUSR_ACCOUNT *account);//修改账户信息 通过
void Delete_usr_account(pUSR_ACCOUNT *account,char name[]); //删除账户信息 通过
pUSR_INFOR Student_build();//建立学生链表
pUSR_INFOR Search_id(pUSR_INFOR *student, int search_id); //学号查询 通过
void Search_name(pUSR_INFOR student, char search_name[]); //姓名查询 通过
void add_usr_infor(pUSR_INFOR *student);// 添加学生信息 通过
void update_usr_infor(pUSR_INFOR *student); //修改学生信息
void delete_usr_infor(pUSR_INFOR *student,int id); //删除学生信息
void Input_all_student(pUSR_INFOR *student); //输出所有学生的信息 通过
pUSR_INFOR Sortlinklist(pUSR_INFOR student); //学生成绩排序 通过
#endif
登录界面设计
#include "nevergiveup.h"
//打开系统后建立账户表
pUSR_ACCOUNT Account_build()
{
pUSR_ACCOUNT account;
FILE *fp;
char str[USR_NAME_LEN];
pUSR_ACCOUNT p;
account=(pUSR_ACCOUNT)calloc(1,sizeof(USR_ACCOUNT));
account=NULL;
fp=fopen("D:\\Coding\\SIMS\\SIMS\\usr_account.txt","rb");
if(fp==NULL) //如果打开失败
{
printf("Account open wrong!!\n");
system("pause");
exit(0);
}
while (fscanf(fp,"%s",str)!=EOF)
{
//printf("%s",str);
p=(pUSR_ACCOUNT)calloc(1,sizeof(USR_ACCOUNT));
strcpy(p->usr_name,str);
fscanf(fp,"%s",str);
//printf("%s",str);
strcpy(p->usr_pwd,str);
fscanf(fp,"%s",str);
//printf("%s",str);
strcpy(p->usr_role,str);
p->next=account;
account=p;
}
fclose(fp);
return account;
}
//链表,和输入的字符串账号进行查找,如果S系统权限 返回1 用户权限
void Role_confirm(pUSR_ACCOUNT account,char usrname[])
{
int i=0;
int j=3;
char role1[ROLE]="S";
char role2[ROLE]="A";
char psd[USR_PWD_LEN];
pUSR_ACCOUNT p;
p=account; //指向第一个账户结点
while(p!=NULL)
{
if(!strcmp(p->usr_name,usrname))
{
system("cls");
printf("enter usr_password: ");
// while(psd[i]=getch())
// {
// if(i==20) //回车停止输入
// break;
// if(psd[i]==13)
// break;
// if(psd[i]!='\b')
// {
// printf("*");
// i++;
// }
// else
// {
// printf("\b \b ");
// i--;
// }
// }
// psd[i]='\0';
while(j>0)
{
GetPasswd(psd);
if(!strcmp(p->usr_pwd,psd))
{
system("cls");
if(!strcmp(p->usr_role,role1))
{
show_system_menu();
}
else if(!strcmp(p->usr_role,role2))
{
show_normal_menu();
}
else
{
printf("No privilege!!\n");
}
}
else
{
system("cls");
printf("the password is wrong! Please input again!\n");
printf("enter usr_password: ");
}
j--;
}
}
if(j==0)
{
exit(-1);
}
else
{
p=p->next;
}
}
if(p==NULL)
{
printf("No Account!Please Register\n");
printf("Inverting to the Page of Register,loading............ ");
Sleep(3000);
Register(&account);
//注册的信息,调用函数
}
}
void GetPasswd(char *passwd)
{
unsigned char c;
int i = 0;
while ((c=getch())!='\r')
{
if (i<USR_PWD_LEN && !isspace(c) && isprint(c))
{
passwd[i++] = c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
else if( c=='\n' || c==' ')
{
continue;
}
}
if( passwd[0]=='\0')
GetPasswd(passwd);
else
{
putchar('\n');
passwd[i] = '\0';
}
}
#include "nevergiveup.h"
//如果权限为A,调用
void show_normal_menu()
{
int i,circle;
system("cls");
printf("******************************************************************************\n");
printf("********************Student Information Management System************************\n");
printf("******************************************************************************\n");
printf("\n");
printf("\n");
printf(" 1.search student information\n");
printf(" 9. exit\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
while(fflush(stdin),printf("select the number :"),scanf("%d",&i)!=EOF)
{
switch(i)
{
case 1:
system("cls");
show_normal_search();
break;
case 9:
exit(0);
break;
default:
// while(scanf("%d",&circle)==EOF)
// {
// system("cls");
// show_normal_menu();
// }
printf("No Privilege!!!\n");
break;
}
}
}
//如果权限S调用
void show_system_menu()
{
int circle;
int i;
int id;
char name[USR_NAME_LEN];
char search_name[USR_NAME_LEN];
pUSR_ACCOUNT p;
system("cls");
printf("******************************************************************************\n");
printf("********************Student Information Management System************************\n");
printf("******************************************************************************\n");
printf("\n");
printf("\n");
printf(" 1.search student information \n");
printf(" 2.add student information\n");
printf(" 3.update student information\n");
printf(" 4.delete student information\n");
printf(" 5.add user account\n");
printf(" 6.update user account\n");
printf(" 7.delete user account\n");
printf(" 8.search user account\n");
printf(" 9. exit");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
while(fflush(stdin),printf("select the number :"),scanf("%d",&i)!=EOF)
{
switch(i)
{
case 1:
system("cls");
show_system_search();
break;
case 2:
add_usr_infor(&student);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 3:
update_usr_infor(&student);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 4:
printf("Please Input information about usr_id : \n"); //and usr_name
scanf("%d %s",&id/*,name*/);
delete_usr_infor(&student,id/*,name*/);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 5:
Register(&account);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 6:
Update_usr_account(&account);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 7:
printf("Please the Account name Which you want to delete : ");
scanf("%s",name);
Delete_usr_account(&account,name);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 8:
printf("\rPlease input the search_account_name :");
scanf("%s",search_name);
p=Search_usr_account(&account,search_name);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_menu();
}
break;
case 9:
exit(0);
break;
default:
printf("Error number! please input the number again!\n");
break;
}
}
}
void show_normal_search()
{
int circle;
pUSR_INFOR p;
int i;
int search_id;
char search_name[USR_NAME_LEN];
system("cls");
printf("******************************************************************************\n");
printf("********************Student Information Management System************************\n");
printf("******************************************************************************\n");
printf("\n");
printf("\n");
printf(" 1.search student information by name\n");
printf(" 2.search student information by id \n");
printf(" 3. return \n");
printf(" 4. exit \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
while(fflush(stdin),printf("select the number :"),scanf("%d",&i)!=EOF)
{
switch(i)
{
case 1:
printf("\rPlease input the search_name :");
scanf("%s",search_name);
Search_name(student,search_name);
break;
case 2:
printf("\rPlease input the search_id :");
scanf("%d",&search_id);
//****************************
p=Search_id(&student,search_id);
break;
case 3:
system("cls");
show_normal_menu();
break;
case 4:
exit(0);
break;
default:
printf("Please input the number again!!!");
break;
}
}
}
void show_system_search()
{
pUSR_INFOR p;
int i,circle;
char search_name[USR_NAME_LEN];
int search_id;
system("cls");
printf("******************************************************************************\n");
printf("********************Student Information Management System************************\n");
printf("******************************************************************************\n");
printf("\n");
printf("\n");
printf(" 1.search all students information \n");
printf(" 2.search student information by name \n");
printf(" 3.search student information by id \n");
printf(" 4. return \n");
printf(" 9. exit \n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
while(fflush(stdin),printf("select the number :"),scanf("%d",&i)!=EOF)
{
switch(i)
{
case 1:
Input_all_student(&student);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_search();
}
break;
case 2:
printf("\rPlease input the search_name :");
scanf("%s",search_name);
Search_name(student,search_name);
while(scanf("%d",&circle)==EOF)
{
system("cls");
show_system_search();
}
break;
case 3:
printf("\r");
printf("Please input the search_id :");
scanf("%d",&search_id);
//****************************
p=Sear