C语言管理系统

//当指针为负值时指针中没有数值导致赋值给其他指针出错
//例如char * pCh gets(pch) ;当gets读取pCh中的数值时候未赋值导致错误引发中断,在给函数传递参数时候也会发生此类错误需要注意

#include "StdAfx.h"
#include <stdio.h>
#include <math.h>
#include <windows.h>

#define MENUCHOICE "abcdef"
#define MAXREAD 100
typedef struct item{
int stdNum ;
int age ;
char name[20] ;
float height ;
float weight ;
}Item ;
typedef struct node {
Item item ;
struct node * next ;
}Node ;
typedef struct list{
Node * head ;
int memberNum ;
}List ;

int showMenu ;
char str[MAXREAD] ;

void Initialize(List * pList) ;
void reg (char * pPassword) ;
BOOL login(void) ;
void loadData(List * pList) ;
int Menu(List * pList) ;
int ShowMember(List * pList) ;
int ShowAllMember(List * pList) ;
int AddMember(List * pList) ;
int DeleteMember(List * pList) ;
int AlterMember(List * pList) ;
BOOL NoMember(List * pList) ;
int ExitSave(List * pList) ;
void ExitPrintf(void) ;
BOOL StrToDigit(char * str,int * piData,float * pfData) ;
void gotoxy (int x,int y) ;
void setColor (int fg) ;

 

void main(void)
{
List list ;
char ch ;

Initialize(&list) ;
loadData(&list) ;
login () ;
while(TRUE) //选择功能
{
Menu(&list) ;
scanf ("%c",&ch) ;
fflush (stdin) ;
showMenu = TRUE ;
switch(ch)
{
case 'a':
ShowAllMember (&list) ;
break ;
case 'b':
ShowMember (&list) ;
break ;
case 'c':
AddMember (&list) ;
break ;
case 'd':
DeleteMember (&list) ;
break ;
case 'e':
AlterMember (&list) ;
break ;
case 'f':
ExitSave (&list) ;
break ;
default:
Menu(&list) ;
printf ("\n\t\t\t错误:请输入字母a到f\n") ;
gotoxy (41,15) ;
showMenu = FALSE ;
} ;

}


}
/*数据初始化*/
void Initialize(List * pList)
{
pList->head = NULL ;
pList->memberNum = 0 ;
showMenu = TRUE ;
setColor(10) ;
atexit (ExitPrintf) ;
}
/*登陆*/
BOOL login(void)
{
char password[MAXREAD] ,input[MAXREAD];
FILE * fp ;

reg (password) ; //第一次登陆注册

if(NULL == (fp = fopen ("password","rb"))) //读取系统密码
{
printf ("\t\t\t错误:不能打开这个文件") ;
exit (EXIT_FAILURE) ;
}
else
fread (password,sizeof(password),1,fp) ;

system ("cls") ;
printf ("\n\n\n\n\n\t\t╭═════════════════════╮\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t║ 欢迎使用成员信息管理系统 ║\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t╰═════════════════════╯\n") ;
printf ("\n\n\t\t请输入系统密码:") ;

while (gets (input))
{
if (0 == strcmp (input,password))
{
fflush (stdin) ;
return TRUE ;
}
else
system ("cls") ;
printf ("\n\n\n\n\n\t\t╭═════════════════════╮\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t║ 欢迎使用成员信息管理系统 ║\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t╰═════════════════════╯\n") ;
gotoxy (0,13) ;
printf ("\t\t密码错误,请重新输入") ;
gotoxy (0,12) ;
printf ("\t\t请输入系统密码:") ;
fflush (stdin) ;
}
return FALSE ;
}
/*注册*/
void reg(char * pPassword)
{
FILE * fp ;
if(NULL == (fp = fopen ("password","rb")) || 0 == fread(pPassword,MAXREAD * sizeof (char),1,fp)) //创建一个存储信息文件
{
if(NULL == (fp = fopen ("password","wb")))
{
printf ("\t\t\t错误:不能创建文件\n") ;
exit (EXIT_FAILURE) ;
}
printf ("\n\n\n\n\n\t\t╭═════════════════════╮\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t║ 欢迎使用成员信息管理系统 ║\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t╰═════════════════════╯\n") ;
printf ("\n\n\t\t第一次登陆") ;
printf ("\n\t\t请输入初始系统密码(密码长度为1到100位):") ;
while(gets (pPassword))
{
system ("cls") ;
if ('\0' == *pPassword)
{
printf ("\n\n\n\n\n\t\t╭═════════════════════╮\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t║ 欢迎使用成员信息管理系统 ║\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t╰═════════════════════╯\n") ;
printf ("\n\n\t\t第一次登陆") ;
printf ("\n\t\t请输入初始系统密码(密码长度为1到100位):") ;
printf ("\n\t\t密码不能为空") ;
gotoxy (55,13) ;
}
else
break ;
}
if(NULL == (fp = fopen ("password","wb")))
{
printf ("\t\t\t错误:不能打开这个文件") ;
exit (EXIT_FAILURE) ;
}
else
{
if(0 == fwrite (pPassword,MAXREAD * sizeof (char),1,fp))
{
printf ("\t\t\t错误:不能写入密码") ;
exit (EXIT_FAILURE) ;
}
}
printf ("\n\n\n\n\n\t\t╭═════════════════════╮\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t║ 欢迎使用成员信息管理系统 ║\n") ;
printf ("\t\t║ ║\n") ;
printf ("\t\t╰═════════════════════╯\n") ;
printf ("\n\n\t\t密码输入成功,请详记您的密码:%s",pPassword) ;
printf ("\n\t\t按任意键进入系统") ;
getchar () ;
}
}
/*加载数据*/
void loadData(List * pList)
{
FILE * fp ;
if(NULL == (fp = fopen ("data","rb"))) //创建一个存储信息文件
{
if(NULL == (fp = fopen ("data","wb")))
{
printf ("\t\t\t错误:不能创建文件\n") ;
exit (EXIT_FAILURE) ;
}
}
while(TRUE) //读取内容
{
static int i = 1 ;
Node * tempNode,* nextNode ;
long size ;
size = sizeof(Node) ;

tempNode = (Node *)malloc (size) ;
if(1 == fread (&(tempNode->item),size,1,fp))
{

if(NULL == pList->head)
pList->head = tempNode ;
else
{
nextNode = pList->head ;

while(nextNode->next != NULL)
nextNode = nextNode->next ;
nextNode->next = tempNode ;

}
fseek (fp,size * i,SEEK_SET) ;
(pList->memberNum)++ ;
i++ ;

}
else
break ;
}
fclose(fp) ;
}
/*展示菜单*/
int Menu (List * pList)
{
if (FALSE == showMenu)
return 0 ;
system ("cls") ;
printf ("\n\n\t ---------------------------------------------------------\n") ;
printf ("\t | 成员信息管理系统 |\n") ;
printf ("\t ---------------------------------------------------------\n") ;
printf ("\n\t\t\t当前成员个数:%d \n",pList->memberNum) ;
printf ("\t\t\ta)查看所有成员信息 \n") ;
printf ("\t\t\tb)查看一个成员信息 \n") ;
printf ("\t\t\tc)增加一个成员信息 \n") ;
printf ("\t\t\td)删除一个成员信息 \n") ;
printf ("\t\t\te)修改一个成员信息 \n") ;
printf ("\t\t\tf)退出 \n") ;
printf ("\t\t\t输入a至f选择功能:") ;
}
/*展示成员*/
int ShowMember(List * pList)
{
int stdNum ;
Node * tempNode ;


tempNode = pList->head ;


if (TRUE == NoMember(pList))
return 0 ;

system ("cls") ;
printf ("\n\n\t\t\t请输入成员号码:") ;
while(gets (str))
{
if (TRUE == StrToDigit(str,&stdNum,NULL))
break ;
system ("cls") ;
printf ("\n\n\t\t\t请输入成员号码:") ;
printf ("\n\t\t\t错误:请输入整数\n") ;
gotoxy (39,2) ;
fflush (stdin) ;
}
while(tempNode != NULL)
{
if(stdNum == tempNode->item.stdNum)
break ;
tempNode = tempNode->next ;
}
if(NULL == tempNode)
{
printf ("\t\t\t错误:没找到该成员\n") ;
printf ("\t\t\t显示失败按任意键返回\n") ;
}
else
{
printf ("\n\n\t\t\t成员号码:%d\n",tempNode->item.stdNum) ;
printf ("\t\t\t成员姓名:%s\n",tempNode->item.name) ;
printf ("\t\t\t成员年龄:%d\n",tempNode->item.age) ;
printf ("\t\t\t成员体重:%f\n",tempNode->item.weight) ;
printf ("\t\t\t成员身高:%f\n",tempNode->item.height) ;
printf ("\n") ;

printf ("\t\t\t显示成功按任意键返回\n") ;
}
fflush(stdin) ;

getchar () ;
}
/*展示所有成员*/
int ShowAllMember(List * pList)
{
Node * tempNode ;
tempNode = pList->head ;


if (TRUE == NoMember(pList))
return 0 ;
system ("cls") ;
while(tempNode != NULL)
{
printf ("\n\n\t\t\t成员号码:%d\n",tempNode->item.stdNum) ;
printf ("\t\t\t成员姓名:%s\n",tempNode->item.name) ;
printf ("\t\t\t成员年龄:%d\n",tempNode->item.age) ;
printf ("\t\t\t成员体重:%f\n",tempNode->item.weight) ;
printf ("\t\t\t成员身高:%f\n",tempNode->item.height) ;
printf ("\n");

tempNode = tempNode->next ;
}
printf ("\t\t\t显示成功按任意键返回\n") ;
getchar () ;
}
/*增加成员*/
int AddMember(List * pList)
{
Node * tempNode, * nextitem ;

tempNode = (Node *)malloc (sizeof(Node)) ;

system ("cls") ;
printf ("\n\n\t\t\t请输入成员号码:") ; //学号
while(gets (str))
{
if (TRUE == StrToDigit(str,&(tempNode->item.stdNum),NULL))
break ;
system ("cls") ;
printf ("\n\n\t\t\t请输入成员号码:") ;
printf ("\n\t\t\t错误:请输入数字\n") ;
gotoxy (39,2) ;
fflush (stdin) ;
}
fflush (stdin) ;

printf ("\t\t\t请输入成员名字:");
gotoxy (39,3) ;
while(gets (str))
{
if ('\0' == *str)
{
gotoxy (39,2) ;
printf ("\n\t\t\t请输入成员名字:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b");
printf ("\n\t\t\t你又不是无名,快报上大名!") ;
gotoxy (39,3) ;
}
else
{
strcpy (tempNode->item.name,str) ;
break ;
}
fflush (stdin) ;
}
fflush (stdin) ;
printf ("\t\t\t请输入成员年龄:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ; //年龄
gotoxy (39,4) ;
while(gets (str))
{
if (TRUE == StrToDigit(str,&(tempNode->item.age),NULL))
break ;
gotoxy (39,3) ;
printf ("\n\t\t\t请输入成员年龄:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
printf ("\n\t\t\t错误:请输入整数") ;
gotoxy (39,4) ;
fflush (stdin) ;
}
fflush (stdin) ;

printf ("\t\t\t请输入成员体重:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ; //体重
gotoxy (39,5) ;
while(gets (str))
{
if (TRUE == StrToDigit(str,NULL,&(tempNode->item.weight)))
break ;
gotoxy (39,4) ;
printf ("\n\t\t\t请输入成员体重:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
printf ("\n\t\t\t错误:请输入数字\n") ;
gotoxy (39,5) ;
fflush (stdin) ;
}
fflush (stdin) ;

printf ("\t\t\t请输入成员身高:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ; //身高
gotoxy (39,6) ;
while(gets (str))
{
if (TRUE == StrToDigit(str,NULL,&(tempNode->item.height)))
break ;
gotoxy (39,5) ;
printf ("\n\t\t\t请输入成员身高:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
printf ("\n\t\t\t错误:错误请输入数字\n") ;
gotoxy (39,6) ;
fflush (stdin) ;
}
fflush (stdin) ;

tempNode->next = NULL;
if(NULL == pList->head)
pList->head = tempNode ;
else
{
nextitem = pList->head ;
while(nextitem->next != NULL)
nextitem = nextitem->next ;
nextitem->next = tempNode ;
}
(pList->memberNum)++ ;
printf ("\n\t\t\t添加成功按任意键返回\n") ;
getchar () ;

return 0 ;
}
/*删除成员*/
int DeleteMember(List * pList)
{
int stdNum ;
Node * tempNode ,* prevNode ;

tempNode = pList->head ;


if (TRUE == NoMember(pList))
return 0 ;
system("cls") ;
printf ("\n\n\t\t\t请输入您想要删除的成员号码:") ;
while(gets (str))
{
if (TRUE == StrToDigit(str,&stdNum,NULL))
break ;
system ("cls") ;
printf ("\n\n\t\t\t请输入您想要删除的成员号码:") ;
printf ("\n\t\t\t错误:请输入整数\n") ;
gotoxy (51,2) ;
fflush (stdin) ;
}
fflush (stdin) ;
while(tempNode != NULL)
{
if(stdNum == tempNode->item.stdNum)
{
break ;
}
else
{
prevNode = tempNode ;
tempNode = tempNode->next ;
}
}
if(NULL == tempNode)
{
printf ("\t\t\t错误:找不到该成员\n") ;
printf ("\t\t\t按任意键返回\n") ;
getchar () ;
return 0 ;
}
else if(pList->head == tempNode) //判断删除的成员是否是表头,并将删除的成员下一个成员接上上一个的next
{
pList->head = tempNode->next ;
pList->memberNum-- ;
}
else
{
prevNode->next = tempNode->next ;
pList->memberNum-- ;
}
printf ("\n\n\t\t\t删除成功按任意键返回\n") ;
getchar () ;
}
/*修改成员*/
int AlterMember(List * pList)
{
int stdNum ;
char input[8];
char judgeStr[4][8] = {
"姓名",
"年龄",
"身高",
"体重"
} ;
Node * tempNode ;


tempNode = pList->head ;


if (TRUE == NoMember(pList))
return 0 ;
system ("cls") ;
printf ("\n\n\t\t\t请输入要修改的成员号码:") ;
while(gets (str))
{
if (TRUE == StrToDigit(str,&stdNum,NULL))
break ;
gotoxy (47,1) ;
printf ("\n\t\t\t请输入要修改的成员号码:") ;
printf ("\n\t\t\t错误:请输入整数\n") ;
gotoxy (47,2) ;
fflush (stdin) ;
}
while(tempNode != NULL) //寻找成员
{
if(stdNum == tempNode->item.stdNum)
break ;
else
tempNode = tempNode->next ;
}
if(NULL == tempNode) //判断是否发现成员
{
printf ("\t\t\t错误:找不到该成员\n") ;
printf ("\n\t\t\t修改失败按任意键返回") ;
getchar () ;
}
else //发现成员执行功能
{
printf ("\t\t\t成员号码:%d\t\t\t\b\b\b\n",tempNode->item.stdNum) ; //显示成员信息
printf ("\t\t\t成员姓名:%s\n",tempNode->item.name) ;
printf ("\t\t\t成员年龄:%d\n",tempNode->item.age) ;
printf ("\t\t\t成员体重:%f\n",tempNode->item.weight) ;
printf ("\t\t\t成员身高:%f\n",tempNode->item.height) ;
printf ("\t\t\t您想要修改的信息是:") ; //显示用户可以修改信息
printf ("\n\t\t\t(请输入:姓名,年龄,身高,体重)") ;
gotoxy(43,8) ;
while(gets (input)) //判断用户输入是否正确
{
if(0 == strcmp (input,judgeStr[0]))
{
printf ("\t\t\t请输入成员姓名:\t\t\t\t\t\t\t\b\b\b\b\b\b\b") ;
gotoxy(39,9) ;
while (gets (tempNode->item.name))
{
if ('\0' == *(tempNode->item.name))
{
gotoxy(39,8) ;
printf ("\n\t\t\t请输入成员姓名:\t\t\t\b\b\b") ;
printf ("\n\t\t\t你又不是无名,快报上大名!\n") ;
gotoxy(39,9) ;
}
else
{
printf ("\n\t\t\t修改成功按任意键返回\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
fflush (stdin) ;
break ;
}
}
break ;
}
else if(0 == strcmp (input,judgeStr[1]))
{
printf("\t\t\t请输入成员年龄:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
gotoxy(39,9) ;
while(gets (str))
{
if (TRUE == StrToDigit(str,&(tempNode->item.age),NULL))
break ;
gotoxy(39,8) ;
printf ("\n\t\t\t请输入成员年龄:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
printf ("\n\t\t\t错误:请输入整数") ;
gotoxy(39,9) ;
fflush (stdin);
}
printf ("\n\t\t\t修改成功按任意键返回\n") ;
fflush (stdin) ;
break ;
}
else if(0 == strcmp (input,judgeStr[2])) //正确使用修改身高功能
{
printf("\t\t\t请输入成员的身高:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
while(gets (str))
{
if (TRUE == StrToDigit(str,NULL,&(tempNode->item.height)))
break ;
gotoxy (41,8) ;
printf("\n\t\t\t请输入成员的身高:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
printf("\n\t\t\t错误:请输入字数") ;
gotoxy (41,9) ;
fflush(stdin) ;
}
printf ("\n\t\t\t修改成功按任意键返回\n") ;
fflush(stdin) ;
break ;
}
else if(0 == strcmp (input,judgeStr[3])) //正确使用修改体重功能
{
printf("\t\t\t请输入成员的体重:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
while(gets (str))
{
if (TRUE == StrToDigit(str,NULL,&(tempNode->item.weight)))
break ;
gotoxy (41,8) ;
printf ("\n\t\t\t请输入成员的体重:\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
printf ("\n\t\t\t错误:请输入成员的号码") ;
gotoxy (41,9) ;
fflush (stdin) ;
}
printf ("\n\t\t\t修改成功按任意键返回\n") ;
fflush (stdin) ;
break ;
}
else
{
gotoxy (43,8) ;
printf ("\n\t\t\t错误:请输入姓名,年龄,身高,体重\n") ;
gotoxy (43,8) ;
printf ("\t\t\t\t\t\t\t\t\b\b\b\b\b\b\b\b") ;
gotoxy (43,8) ;
}

}
}
fflush (stdin) ;
getchar () ;
}
/*无成员判断功能*/
BOOL NoMember(List * pList)
{
if (0 == pList->memberNum)
{

Menu (pList) ;
printf ("\n\t\t\t错误:当前系统录入成员为零,请增加成员后再使用该功能\n") ;
gotoxy (41,15) ;
showMenu = FALSE ;
return TRUE ;
}
return FALSE ;
}
/*退出保存*/
int ExitSave(List * pList)
{
Node * tempNode ;
FILE * fp ;

tempNode = pList->head ;

if(NULL == (fp = fopen ("data","wb")))
printf ("\t\t\t错误:不能打开这个文件") ;
else
{
while(tempNode != NULL)
{
Node * nextNode ;

nextNode = tempNode->next ;
tempNode->next = NULL ;

if(0 == fwrite (tempNode,sizeof(Node),1,fp))
{
printf ("\t\t\t错误:不能保存信息") ;
exit (EXIT_FAILURE) ;
}
else
tempNode = nextNode ;
}
}
exit (EXIT_SUCCESS) ;
}
/*退出打印*/
void ExitPrintf(void)
{
int i ;
system ("cls") ;
gotoxy (0,5) ;
printf ("\t\t\t正在保存中.") ;
for (i = 0;i < 10;i++)
{
Sleep (40) ;
printf ("..") ;
}

system ("cls") ;
gotoxy (0,5) ;
printf ("\t\t\t保存完毕,谢谢使用该系统\n") ;
Sleep (500) ;
}
/*字符转数字*/
BOOL StrToDigit(char * str,int * piData,float * pfData)
{
int intNum,i,j,pPos,bpNum,apNum,allNum; //bpNum为小数点前的浮点个数 apNum为小数点后的个数

intNum = 0 ;
bpNum = 0 ;
allNum = 0 ;
pPos = 0 ;

if (piData != NULL) //启动整数转换
{
*piData = 0 ;
for (i = 0 ;*(str + i) != '\0';i++)
{
if(!isdigit (*(str + i)))
return FALSE ;
intNum++;
}
if (0 == intNum)
return FALSE ;
for (i = 0 ;*(str + i) != '\0';i++)
{
*piData += (*(str+i) - '0') * pow ((double)10,(double)(intNum -1));
intNum--;
}
}
else //小数转换
{
*pfData = 0 ;
for (i = 0 ;*(str + i) != '\0';i++)
{
if(isdigit (*(str + i)) || '.' == *(str + i))
{
if ('.' == *(str + i))
{
if (0 == i)
return FALSE ;
else
pPos = i ;
}
}
else
return FALSE ;
}
if (0 == i)
return FALSE ;

if (pPos != 0)
{
bpNum = pPos;
allNum = i - 1;
}
else
{
allNum = i;
bpNum = allNum;
}
for (i = 0,j = bpNum;i < bpNum;i++)
{
*pfData += (*(str + i) - '0') * pow ((double)10,(double)(j - 1));
j--;
}
if (0 == pPos)
return TRUE ;
for (j = 1;++i < allNum + 1;j++)
{
*pfData += (*(str + i) - '0') * pow ((float)10,(int)(-j));
}
}
return TRUE ;

}
/*API坐标转换*/
void gotoxy (int x,int y)
{
COORD coord = {x,y} ;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord) ;

}
/*API设置颜色*/
void setColor (int fg)
{
WORD wc ;
HANDLE h = GetStdHandle (STD_OUTPUT_HANDLE) ;
wc = (fg & 0x000f ) ;

SetConsoleTextAttribute (h,wc) ;
}

转载于:https://www.cnblogs.com/Bug-Man/p/3826498.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #define ID struct id struct id { char name[20]; // xing ming int num; // xue hao int age; // nian ling char sex[2]; // xing bie char xi[20]; // xi bie char zhuan[20]; // zhuan ye char add[20]; // di zhi ID *next; // }; // FILE *fp; // ID *head; int sum_age=0,max_age=0,min_age=100,pc=0; float ave_age=0; ID *creat() { ID *p1,*p2,*head; int pd; p1=p2=head=NULL; printf("\t\t\t 开始输入记录!!!\n"); printf("please input pd:\n"); scanf("%d",&pd); while(pd!=0) { p1=(ID*)malloc(sizeof(ID)); printf("请输入学生的学号:\n");scanf("%d",&p1->num); printf("请输入学生的姓名:\n");scanf("%s",p1->name); printf("请输入学生的年龄:\n");scanf("%d",&p1->age); sum_age+=p1->age; if(max_age<p1->age) max_age=p1->age; if(min_age>p1->age) min_age=p1->age; printf("请输入学生的性别:\n");scanf("%s",p1->sex); printf("请输入学生的系别:\n");scanf("%s",p1->xi); printf("请输入学生的专业:\n");scanf("%s",p1->zhuan); printf("请输入学生的地址:\n");scanf("%s",&p1->add); if(head==NULL) { head=p1; p2=p1; } else { p2->next=p1; p2=p1; } printf("please input pd:\n"); scanf("%d",&pd); pc++; } p2->next=NULL; return(head); } /*输入/添加记录*/ ID *insert(ID *head) { ID *temp,*p1,*p2; int pd; start: p1=head; printf("插入操作开始!!!\n"); temp=(ID *)malloc(sizeof(ID)); printf("请输入学生的学号:\n");scanf("%d",&temp->num); printf("请输入学生的姓名:\n");scanf("%s",temp->name); printf("请输入学生的年龄:\n");scanf("%d",&temp->age); printf("请输入学生的性别:\n");scanf("%s",temp->sex); printf("请输入学生的系别:\n");scanf("%s",temp->xi); printf("请输入学生的专业:\n");scanf("%s",temp->zhuan); printf("请输入学生的地址:\n");scanf("%s",temp->add); if (head==NULL) { head=temp; temp->next=NULL; } else { while(p1!=NULL) { p2=p1; p1=p1->next; } p2->next=temp; temp->next=NULL; } printf("插入末尾成功"); pc++; printf("是否继续插入 1.Yes 2.No;\n"); scanf("%d",&pd); if(pd==1) goto start; return (head); } /*删除学生记录*/ ID *delet(ID *head) { ID *p1,*p2; int num; printf("请输入要删除的学生的学号:");scanf("%d",&num); p1=head; if (head==NULL) { printf("没有记录\n"); goto end; } while(num!=p1->num && p1!=NULL) { p2=p1;p1=p1->next; } if(num==p1->num) { if (p1==head) head=p1->next; else p2->next=p1->next; printf("删除成功!!!\n"); pc--; //free(p1); //free(p2); } end:return head; } /*查找学生记录*/ ID *search(ID *head) { ID *p1,*p2; int num; printf("请输入要查找的学生的学号:");scanf("%d",&num); p1=head; while(num!=p1->num && p1!=NULL) { p2=p1;p1=p1->next; } if(num==p1->num) { printf("学生的学号:%d\n",p1->num); printf("学生的姓名:%s\n",p1->name); printf("学生的年龄:%d\n",p1->age); printf("学生的性别:%s\n",p1->sex); printf("学生的系别:%s\n",p1->xi); printf("学生的专业:%s\n",p1->zhuan); printf("学生的地址:%s\n",&p1->add); //free(p1); //free(p2); } return head; } /*按学号查询学生记录进行修改*/ ID *modify_num(ID *head) { ID *p; int i,m,n,num; start: printf("请输入要修改的学生的学号:"); scanf("%d",&num); p=head; while(p!=NULL ) { if(num==p->num) { m=1; while(m==1) { m=0; printf("\t\t 1.修改学生的学号\n"); printf("\t\t 2.修改学生的姓名\n"); printf("\t\t 3.修改学生的年龄\n"); printf("\t\t 4.修改学生的性别\n"); printf("\t\t 5.修改学生的系别\n"); printf("\t\t 6.修改学生的专业\n"); printf("\t\t 7.修改学生的地址\n"); printf("请选择(1--7):"); scanf("%d",&i); switch( i ) { case 1 : printf("请输入修改后的学号:"); scanf("%d",&p->num); break; case 2: printf("请输入修改后的姓名:"); scanf("%s",p->name); break; case 3: printf("请输入修改后的年龄:"); scanf("%d",&p->age); break; case 4: printf("请输入修改后的性别:"); scanf("%s",&p->sex); break; case 5: printf("请输入修改后的系别:"); scanf("%s",p->xi); break; case 6: printf("请输入修改后的专业:"); scanf("%s",p->zhuan); break; case 7: printf("请输入修改后的地址:"); scanf("%s",p->add); break; default: printf("输入错误,请重新输入"); } } break; } p=p->next; } printf("是否继续修改其他学生情况(1改 2不改):"); scanf("%d",&n); if(n==1)goto start; else return head; } /*退出程序*/ void ask_age() { if(pc==0) { printf("没有记录\n"); return ; } ave_age=float(sum_age*1.0/pc); printf("%f\n",ave_age); printf("%d\n",max_age); printf("%d\n",min_age); } /*显示结果函数*/ void print(ID *head) { ID *p; p=head; printf("\t\t\t*****************\n"); printf("显示结果是:\n"); if(head!=NULL) do { printf("%10d%10s%10d%10s%10s%10s%10s\n",p->num,p->name,p->age,p->sex,p->xi,p->zhuan,p->add); p=p->next; } while(p!=NULL); } void main() { ID *head; int choise; printf("\t\t\t* * * * 李林C语言课设* * * *\n"); while(1) { printf("\t\t 学生信息管理系统\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t 1.建立文件\n"); printf("\t\t 2.插入数据\n"); printf("\t\t 3.删除数据\n"); printf("\t\t 4.修改记录\n"); printf("\t\t 5.搜索记录\n"); printf("\t\t 6.求年龄\n"); printf("\t\t 0.退出\n"); printf("\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请选择(0-6):"); scanf("%d",&choise); switch(choise) { case 1: head=creat(); print(head); break; case 2: head=insert(head); print(head); break; case 3: head=delet(head); print(head); break; case 4: head=modify_num(head); print(head); break; case 5:search(head); print(head); break; case 6:ask_age(); break; case 0: exit(0); break; default :printf("输入错误,请重新输入!\n"); } } } ★★★★★★★★★★★★★★★★★★★★★★★★★★★ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define null 0 struct record { char name[20]; char phone[20]; char adress[40]; char postcode[10]; char e_mail[30]; }student[500]; struct LinkList { struct record US; struct LinkList *next; }a; struct LinkList *head=null; int num=0; FILE *fp; int menu_select(); int adduser(); int list(); int search(); int display(); int add(); int listbyname(); int dele(); int save(); int exit(); void main() { system("cls"); for(;;) { switch(menu_select()) { case 0:adduser();break; case 1:list();break; case 2:search();break; case 3:display();break; case 4:add();break; case 5:listbyname();break; case 6:dele();break; case 7:save();break; case 8:exit(0); } } } menu_select() { char s[80]; int a; printf("*_* press any key enter menu! *_* \n"); getch(); system("cls"); printf("\t\t********************MENU*********************\n\n"); printf("\t\t 0. 输入记录\n"); printf("\t\t 1. 显示记录 \n"); printf("\t\t 2. 按姓名查找\n"); printf("\t\t 3. 按电话号码查找\n"); printf("\t\t 4. 插入记录 \n"); printf("\t\t 5. 按姓名排序\n"); printf("\t\t 6. 删除记录\n"); printf("\t\t 7. 记录保存文件\n"); printf("\t\t 8. Quit\n"); printf("\t\t***********************************************\n"); do{ printf("\n Enter you choice(0~11):"); scanf("%s",s); a=atoi(s); } while (a<0||a>11); return a; } adduser() { printf("\n\t\t**************** 请输入用户信息 ****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } list() { int i; system("cls"); if(num!=0) { printf("\n\t\t*************** 以下为通讯录所有信息************"); for (i=0;i<num;i++) { printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\t邮编: %s",student[i].postcode); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\t\t"); if (i+1<num) { printf("\n\t\t__________________________"); system("pause"); } } printf("\n\t\t************************************************"); } else printf("\n\t\t通讯录中无任何纪录"); printf("\n\t\t按任意键返回主菜单:"); getch(); return(0); } search() { int mark=0; int i; int a=0; printf("\n\t\t***************** 按姓名查找 *******************"); char name[20]; printf("\n\t\t请输入姓名:"); scanf("%s",name); for(i=a;i<num;i++) { if (strcmp(student[i].name,name)==0) { printf("\n\t\t************* 以下是您查找的用户信息 ***********"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t************************************************"); mark++; if ((i+1)<num) { printf("\n\t\t是否继续查找相同名字的用户信息:(y/n)"); if (getch()=='y') { a=i; continue; } else return(0); } else { printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } } } if(mark!=0) { printf("\n\t\t没有相同姓名的用户纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } else { printf("\n\t\t没有相同姓名的用户纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } } display() { int mark=0; int i; int a=0; printf("\n\t\t****************** 按电话查找 ******************"); char phone[10]; printf("\n\t\t请输入电话号码:"); scanf("%s",phone); for(i=0;i<num;i++) { if (strcmp(student[i].phone,phone)==0) { printf("\n\t\t************** 以下是您查找的用户信息 **********"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单:"); mark++; getch(); return(0); } } if (mark==0) { printf("\n\t\t没有改用户的信息"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } return(0); } add() { int i; if ((fp=fopen("student.bin","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for (i=0;i<num;i++) { if (fwrite(&student[i],sizeof(struct record),1,fp)!=1) { printf("\n\t\t写入文件错误!\n"); } printf("\n\t\t**************** 请输入用户信息 ****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } fclose(fp); printf("\n\t\t通讯录文件已保存"); printf("\n\t\t按任意键退出程序\n\t\t"); exit(0); return(0); } void deletebyphone() { int i,j; int deletemark=0; char phone[20]; printf("\n\t\t请输入要删除用户电话号码:"); scanf("%s",phone); if(num==0) { printf("\n\t\t对不起,文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } for (i=0;i<num;i++) { if (strcmp(student[i].phone,phone)==NULL) { printf("\n\t\t以下是您要删除的用户纪录:"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t是否删除?(y/n)"); if (getch()=='y') { for (j=i;j<num-1;j++) student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; } else return; } continue; } if (deletemark==0) { printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; } } void deletebyname() { int a=0; int findmark=0; int j; int deletemark=0; int i; char name[20]; printf("\n\t\t请输入要删除用户姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(student[i].name,name)==NULL) { printf("\n\t\t以下是您要删除的用户纪录:"); findmark++; printf("\n\t\t________________________________"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t________________________________"); printf("\n\t\t是否删除?(y/n)"); if (getch()=='y') { for (j=i;j<num-1;j++) student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); if((i+1)<num) { printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)"); if (getch()=='y') { a=i; continue; } } printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyname(); return; } if((i+1)<num) { printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)"); if (getch()=='y') { a=i; continue; } } } else continue; } if ((deletemark==0)&&(findmark==0)) { printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; return; } else if (findmark!=0) { printf("\n\t\t没有重名信息"); printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; return; } } dele() { char choic; printf("\n\t\t1-按电话号码删除 2-按姓名删除"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case '1':deletebyphone();break; case '2':deletebyname();break; } return(0); } listbyname() { int i,j; struct record tmp; for (i=1;i<num;i++) { if(strcmp(student[i].name,student[i-1].name)<0) { tmp=student[i]; j=i-1; do { student[j+1]=student[j]; j--; }while ((strcmp(tmp.name,student[j].name)<0&&j>=0)); student[j+1]=tmp; } } printf("\n\t\t排序成功,是否显示?(y/n)"); if (getch()=='y') list(); return(0); } save() { int j; FILE*fp; fp=fopen("student.txt","w"); if (fp==NULL) printf("can't open the file."); if(num!=0) { for(j=0;j<num;j++) { fwrite(student,sizeof(student),1,fp); } } printf("保存成功!"); fclose(fp); return(0); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值