前情:现在不是学妹啦,是我女朋友啦,找我简单修改一下程序设计相关的代码,到最后基本重新编写代码,然后简单分享一下,如果小伙伴们喜欢,请给作者点个赞,谢谢啦。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include <malloc.h>
#define Max 100
char a[Max][20];
int length;
void showmenu();
void processmenu();
void create();
void display();
void disbed();
void modify();
void del();
void save();
void testFile(FILE* fp2);
char* Int_Change_char(int num);
typedef struct{
int dormno;
int bedno;
int isstay;
}bedinfo;
struct dorminfo{
bedinfo bed;
char stuno[20];
char name[20];
char stucla[20];
int year;
int month;
struct dorminfo *next;
};
struct dorminfo *head=NULL, *p1, *p2, *p3, *p4;
void showmenu(){
printf("\n\n\n\t\t 欢迎进入学生宿舍管理系统\n");
printf("\t\t*********************************\n");
printf("\t\t1.输入床位信息\n");
printf("\t\t2.根据学号,显示学生住宿信息\n");
printf("\t\t3.根据宿舍号,显示住宿信息\n");
printf("\t\t4.根据宿舍号、床位号,修改住宿信息\n");
printf("\t\t5.根据宿舍号、床位号,删除住宿信息\n");
printf("\t\t6.退出 \n");
printf("\t\t********************************\n") ;
}
void processmenu(){
int caidan;
printf("请输入您的选项<1~7>:");
scanf("%d",&caidan);
if(caidan>=7||caidan<=0)
{
printf("对不起,您输入的选项有误,请重新输入!\n");
printf("请输入您的选项<1~7>:");
scanf("%d",&caidan);
}
switch(caidan)
{
case 1:create();break;
case 2:display();break;
case 3:disbed();break;
case 4:modify();break;
case 5:del();break;
case 6:exit(0);
}
}
void create(){
int j;
char ch;
length = 0;
p1=(struct dorminfo *)malloc(sizeof(struct dorminfo));
if(head==NULL) head=p1;
printf("开始输入床位信息....\n");
Sleep(500);
do
{
p2=(struct dorminfo *)malloc(sizeof(struct dorminfo));
printf("请输入宿舍号:");
scanf("%d",&p2->bed.dormno);
printf("请输入床号:");
scanf("%d",&p2->bed.bedno);
printf("是否有人居住(1/0):");
scanf("%d",&p2->bed.isstay);
getchar();
printf("请输入学生学号:");
scanf("%s",p2->stuno);
strcpy(a[length++], p2->stuno);
if(length > 0)
{
for(j = 1 ; j < length;j++)
{
if(a[length - 1]==a[j])
{
printf("该学号已存在,请重新输入:");
scanf("%s",p2->stuno);
}
}
}
getchar();
printf("请输入学生姓名:");
scanf("%s",p2->name);
getchar();
printf("请输入学生班级:");
scanf("%s",p2->stucla);
printf("请输入学生入住时间(年 月)<如2015 5>:");
scanf("%d%d",&p2->year,&p2->month);
if(p2->year<1000||p2->year>9999||p2->month>12||p2->month<1)
{
printf("对不起,输入错误,请重新输入!\n");
scanf("%d%d\n",&p2->year,&p2->month);
}
p1->next=p2;
p2->next=NULL;
p1=p1->next;
printf("第%d个住宿信息创建成功!\n", length);
Sleep(1000);
system("cls");
fflush(stdin);
printf("是否继续添加住宿信息?<y/Y>");
ch=getchar();
if(ch != 'y' && ch != 'Y'){
printf("正在保存在文件中,请稍等");
save();
}
} while(ch=='y'||ch=='Y');
}
void display(){
//从文件中读取存储的文件数据
FILE* fp2;
int flag=0;
char str[200], No[100];
testFile(fp2);
int END;
fp2 = fopen("学生宿舍管理系统.txt", "r+");
printf("请输入学号:");
scanf("%s",No);
while(fscanf(fp2, "%s", str) != EOF){
char* ch = strstr(str, No);
if(ch) {
printf("%s\n", str);
while(fscanf(fp2, "%s", str) != EOF){
if(strstr(str, "月")) {
printf("%s\n", str);
break;
}
else printf("%s\n", str);
flag = 1;
}
goto end;
}
}
end:if(!flag) printf("没有找到该学生住宿信息!\n");
fclose(fp2);
}
void disbed(){
//从文件中读取存储的文件数据
FILE* fp2;
int flag=0;
int bedno;
char str[200], No[100], temp[100];
testFile(fp2);
fp2 = fopen("学生宿舍管理系统.txt", "r+");
printf("请输入宿舍号:");
scanf("%d",&bedno);
int count = 0;
while(bedno){
int t = bedno % 10;
bedno /= 10;
temp[count++] = t + '0';
}
temp[count] = '\0';
int i = 0;
while(count--){
No[i++] = temp[count];
}
No[i] = '\0';
while(fscanf(fp2, "%s", str) != EOF){
char Stuno[100];
char* ch = strstr(str, No);
if(ch) {
printf("%s\n%s\n", Stuno, str);
while(fscanf(fp2, "%s", str) != EOF){
if(strstr(str, "月")) {
printf("%s\n", str);
break;
}
else printf("%s\n", str);
flag = 1;
}
goto end;
}
else strcpy(Stuno, str);
}
end:if(!flag) printf("没有找到该学生住宿信息!\n");
fclose(fp2);
}
void modify(){
//del()源码改编而来
FILE* fp2, *fp1;
fp1 = fopen("temp.txt", "w");
fp2 = fopen("学生宿舍管理系统.txt", "r+");
testFile(fp2);
int DormNo,BedNo, flag = 1, j = 0;
char dormno[20] = "宿舍号:", bedno[20] = "床号:", *temp;
char str[20];
printf("请输入宿舍号、床位号:");
scanf("%d %d",&DormNo,&BedNo);
temp = Int_Change_char(DormNo);
strncat(dormno, temp, strlen(temp));
temp = Int_Change_char(BedNo);
strncat(bedno, temp, strlen(temp));
char Stuno[20], Dormno[20], Bedno[20], time[20], isstay[20], stucla[30], name[30];
while(fscanf(fp2, "%s", str) != EOF){
printf("1:%s\n", str);
if(strstr(str, "学号")) strcpy(Stuno, str);
if(strstr(str, "宿舍号")) strcpy(Dormno, str);
if(strstr(str, "床号")) strcpy(Bedno, str);
if(strstr(str, "有无人居住")) strcpy(isstay, str);
if(strstr(str, "姓名")) strcpy(name, str);
if(strstr(str, "班级")) strcpy(stucla, str);
if(strstr(str, "入住时间")) strcpy(time, str);
int i = 0;
if(strstr(str, dormno)){
while(fscanf(fp2, "%s", str) != EOF){
if(strstr(str, "床号")) strcpy(Bedno, str);
if(strstr(str, bedno)) {
while(fscanf(fp2, "%s", str) != EOF){
printf("3:%s\n", str);
if(strstr(str, "月")) goto end;
}
}
else break;
}
}
else if(strstr(str, "月")){
flag = 0;
fprintf(fp1, "%s %s %s %s %s %s %s\n", Stuno, Dormno, Bedno, isstay, name, stucla, time);
}
end:printf("");
}
if(flag) printf("找不到要修改的宿舍号、床位号!\n");
else{
printf("请修改新的内容");
create();
}
fclose(fp2);
fclose(fp1);
char oldname[] = "D:/codeblock-c++file/test/学生宿舍管理系统.txt";
char newname[] = "D:/codeblock-c++file/test/temp.txt";
if(remove(oldname) == 0) printf("ok");
if(rename(newname, oldname) == 0) printf("修改成功");
}
void del(){
FILE* fp2, *fp1;
fp1 = fopen("temp.txt", "w");
fp2 = fopen("学生宿舍管理系统.txt", "r+");
testFile(fp2);
int DormNo,BedNo, flag = 1, j = 0;
char dormno[20] = "宿舍号:", bedno[20] = "床号:", *temp;
char str[20];
printf("请输入宿舍号、床位号:");
scanf("%d %d",&DormNo,&BedNo);
temp = Int_Change_char(DormNo);
strncat(dormno, temp, strlen(temp));
temp = Int_Change_char(BedNo);
strncat(bedno, temp, strlen(temp));
char Stuno[20], Dormno[20], Bedno[20], time[20], isstay[20], stucla[30], name[30];
while(fscanf(fp2, "%s", str) != EOF){
printf("1:%s\n", str);
if(strstr(str, "学号")) strcpy(Stuno, str);
if(strstr(str, "宿舍号")) strcpy(Dormno, str);
if(strstr(str, "床号")) strcpy(Bedno, str);
if(strstr(str, "有无人居住")) strcpy(isstay, str);
if(strstr(str, "姓名")) strcpy(name, str);
if(strstr(str, "班级")) strcpy(stucla, str);
if(strstr(str, "入住时间")) strcpy(time, str);
int i = 0;
if(strstr(str, dormno)){
while(fscanf(fp2, "%s", str) != EOF){
if(strstr(str, "床号")) strcpy(Bedno, str);
if(strstr(str, bedno)) {
while(fscanf(fp2, "%s", str) != EOF){
printf("3:%s\n", str);
if(strstr(str, "月")) goto end;
}
}
else break;
}
}
else if(strstr(str, "月")){
flag = 0;
fprintf(fp1, "%s %s %s %s %s %s %s\n", Stuno, Dormno, Bedno, isstay, name, stucla, time);
}
end:printf("");
}
if(flag) printf("找不到要删除的宿舍号、床位号!\n");
fclose(fp2);
fclose(fp1);
char oldname[] = "D:/codeblock-c++file/test/学生宿舍管理系统.txt";
char newname[] = "D:/codeblock-c++file/test/temp.txt";
if(remove(oldname) == 0) printf("ok");
if(rename(newname, oldname) == 0) printf("修改成功");
}
void save(){
FILE *fp1;
if((fp1 = fopen("学生宿舍管理系统.txt", "r+")) == NULL){
printf("文件不存在,无法存储数据,正在创建新的文件\n");
Sleep(500);
if((fp1 = fopen("学生宿舍管理系统.txt", "w")) != NULL) printf("文件创建成功\n");
system("cls");
fclose(fp1);
}
fp1 = fopen("学生宿舍管理系统.txt", "a");
p1=head->next;
printf("正在保存数据...\n");
Sleep(300);
system("cls");
while(p1!=NULL)
{
fprintf(fp1,"学号:%s 宿舍号:%d 床号:%d 有无人居住:%d 姓名:%s 班级:%s 入住时间:%d年%d月\n",p1->stuno,p1->bed.dormno,p1->bed.bedno,p1->bed.isstay,p1->name,p1->stucla,p1->year,p1->month);
p1=p1->next;
if(p1 == NULL)printf("数据保存成功!\n");
}
fclose(fp1);
printf("按任意键返回...\n");
getch();
system("cls");
return ;
}
void testFile(FILE* fp2){
if((fp2 = fopen("学生宿舍管理系统.txt", "r+")) == NULL){
printf("文件不存在,无法存储数据,正在创建新的文件\n");
Sleep(3000);
if((fp2 = fopen("学生宿舍管理系统.txt", "w")) != NULL) printf("文件创建成功\n");
Sleep(1000);
system("cls");
fclose(fp2);
return;
}
}
char* Int_Change_char(int num){
int count = 0;
char* str, *temp;
str = (char*)malloc(20 * sizeof(char));
temp = (char*)malloc(20 * sizeof(char));
while(num){
int t = num % 10;
num /= 10;
temp[count++] = t + '0';
}
temp[count] = '\0';
int i = 0;
while(count--){
str[i++] = temp[count];
}
str[i] = '\0';
return str;
}
int main(){
while(1)
{
showmenu();
processmenu();
system("pause");
system("cls");
}
}