编程过程中遇到的一些问题,有几处错误总是找不到解决办法,请大家可以帮我看一下(软件用的是visaul sdutio 2013)
```c++
// ConsoleApplication4.cpp : 定义控制台应用程序的
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include
#include <string>
#include
#include <assert.h>
struct student
{
char num[20];
char name[20];
char sex[5];
int math;
int chinese;
int sum;
int average;
};
struct Node
{
struct student data;
struct Node* next;
};
struct Node* createList()
{
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
assert(headNode);
headNode->next = NULL;
return headNode;
}
//创建结点
struct Node* createNode(struct student data)
{
struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
assert(newNode);
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//插入结点
void insertNodeByHead(struct Node* headNode, struct student data)
{
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
//删除指定位置
void deleteAppoinNode(struct Node* headNode, const char *name)
{
struct Node* posNode = headNode->next;
struct Node* posFrontNode = headNode;
if (posNode == NULL)
{
printf("数据错误,无法删除!\n");
return;
}
while (strcmp(posNode->data.name, name))
{
posFrontNode = posNode;
posNode = posNode->next;
if (posNode == NULL)
{
printf("未找到指定数据无法删除\n");
return;
}
}
posFrontNode->next = posNode->next;
free(posNode);
}
//查找
struct Node* searchInfoByData(struct Node* headNode, char* name)
{
struct Node* pMove = headNode->next;
if (pMove == NULL)
return NULL;
if (strcmp(pMove->data.name, name) != 0) {
return NULL;
}
while (strcmp(pMove->data.name, name))
{
pMove = pMove->next;
}
return pMove;
};
void redInfoFromFile(struct Node* headNode, char *fileName)
{
FILE *fp;
struct student data;
fp = fopen(fileName, "r");
if (fp == NULL)
{
fp = fopen(fileName, "w+");
}
while (fscanf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num, data.name, data.sex, data.math, data.chinese, data.sum, data.average) != EOF)
{
insertNodeByHead(headNode, data);
}
fclose(fp);
}
void writeInfoToFile(struct Node* headNode, char *fileName)
{
FILE *fp;
fp = fopen(fileName, "w");
struct Node* pMove = headNode->next;
while (pMove)
{
fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num, pMove->data.name, pMove->data.sex, pMove->data.math,
pMove->data.chinese, pMove->data.sum, pMove->data.average);
pMove = pMove->next;
}
}
//打印链表
void printfList(struct Node* headNode)
{
struct Node* pMove = headNode->next;
printf("学号\t姓名\t性别\t数学\t语文\t总分\t平均分\n");
while (pMove != NULL)
{
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num, pMove->data.name, pMove->data.sex, pMove->data.math, pMove->data.chinese, pMove->data.sum, pMove->data.average);
pMove = pMove->next;
}
printf("\n");
}
int menu()
{
printf("--------------------[学生信息管理系统]------------------\n");
printf("\t\t0.退出系统\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("------------------------------------------------------\n");
return 0;
}
struct Node* list = createList();
void keydown()
{
int choice = 0;
struct Node* result;
struct student data;
struct Node* headNode, fileName;
scanf_s("%d", &choice);
switch (choice)
{
case 0:
printf("退出系统\n");
system("pause");
exit(0);
break;
case 1:
printf("---------------[添加学生]--------------\n");
printf("请输入学生学号,姓名,性别,数学成绩,语文成绩,总分,平均分:");
fflush(stdin);
scanf_s("%d%s%s%d%d%d%d", data.num, &data.name, data.sex, data.math, data.chinese, data.sum, data.average);
data.sum = data.math + data.chinese;
data.average = data.sum / 3;
insertNodeByHead(list, data);
break;
case 2:
printf("--------------【显示学生信息】---------\n");
printfList(list);
break;
case 3:
printf("---------------【修改学生信息】---------\n");
printf("请输入需要修改信息的学生姓名");
scanf_s("%s", data.name);
result = searchInfoByData(list, data.name);
if (searchInfoByData(list, data.name) == NULL)
{
printf("未找到相关信息,无法修改,请重试!");
system("pause");
}
else
{
FILE *fp;
printfList(list);
printf("请输入需要修改的信息\n");
scanf_s("%d%s%s%d%d%d%d", data.num, &data.name, data.sex, data.math, data.chinese, data.sum, data.average);
break;
case 4:
printf("---------------【删除学生信息】--\n");
printf("请输入删除的学生姓名");
scanf_s("%s", data.name);
deleteAppoinNode(list, data.name);
if (deleteAppoinNode(list, data.name) == NULL);
{
printf("未找到相关信息,无法删除\n");
break;
case 5:
printf("------------【查找学生信息】--------\n");
printf("请输入查找的学生姓名");
scanf_s("%s", data.name);
if (searchInfoByData(list, data.name) == NULL)
{
printf("未找到相关信息\n");
system("pause");
}
else
{
printf("学号\t姓名\t性别\t数学成绩\t语文成绩\t总分\t平均分\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num, data.name, data.sex, data.math, data.chinese, data.sum, data.average);
}
break;
case 6:
printf("--------------【排序记录】----------\n");
system("pause");
break;
default:
printf("输入错误,请重试\n");
system("pause");
break;
}
writeInfoToFile(list, "1.txt");
return;
}
int _tmain(int argc, _TCHAR* argv[]);
{
readInfoFronFile(list, "1.txt");
while (1)
{
menu();
keydown();
system("pause");
system("cls");
return 0;
}
}
}
```
你没说什么问题
修改完善如下,改动处见注释,供参考:
// ConsoleApplication4.cpp : 定义控制台应用程序的
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include <stdlib.h>
#include <string>
#include <stdio.h>
#include <assert.h>
struct student
{
char num[20];
char name[20];
char sex[5];
int math;
int chinese;
int sum;
int average;
};
struct Node
{
struct student data;
struct Node* next;
};
struct Node* createList()
{
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
assert(headNode);
headNode->next = NULL;
return headNode;
}
//创建结点
struct Node* createNode(struct student data)
{
struct Node*newNode = (struct Node*)malloc(sizeof(struct Node));
assert(newNode);
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//插入结点
void insertNodeByHead(struct Node* headNode, struct student data)
{
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
//删除指定位置
void deleteAppoinNode(struct Node* headNode, const char *name)
{
struct Node* posNode = headNode->next;
struct Node* posFrontNode = headNode;
if (posNode == NULL)
{
printf("数据错误,无法删除!\n");
return;
}
while (strcmp(posNode->data.name, name))
{
posFrontNode = posNode;
posNode = posNode->next;
if (posNode == NULL)
{
printf("未找到指定数据无法删除\n");
return;
}
}
posFrontNode->next = posNode->next;
free(posNode);
}
//查找
struct Node* searchInfoByData(struct Node* headNode, char* name)
{
struct Node* pMove = headNode->next;
if (pMove == NULL)
return NULL;
//if (strcmp(pMove->data.name, name) != 0) { 修改
// return NULL;
//}
while (pMove && strcmp(pMove->data.name, name)) //修改
{
pMove = pMove->next;
}
return pMove;
} //;
void readInfoFromFile(struct Node* headNode, char *fileName) //redInfoFromFile() 函数名错误
{
FILE *fp;
struct student data;
fp = fopen(fileName, "r");
if (fp == NULL)
{
//fp = fopen(fileName, "w+"); //修改
return; //修改
}
while (fscanf(fp, "%s\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num,//fscanf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n",
data.name, data.sex, &data.math, &data.chinese, &data.sum, &data.average) == 7) // != EOF
{
insertNodeByHead(headNode, data);
}
fclose(fp);
}
void writeInfoToFile(struct Node* headNode, char *fileName)
{
FILE *fp;
fp = fopen(fileName, "w");
struct Node* pMove = headNode->next;
while (pMove)
{
fprintf(fp, "%s\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num,//fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%d\n",
pMove->data.name, pMove->data.sex, pMove->data.math,
pMove->data.chinese, pMove->data.sum, pMove->data.average);
pMove = pMove->next;
}
}
//打印链表
void printfList(struct Node* headNode)
{
struct Node* pMove = headNode->next;
printf("学号\t姓名\t性别\t数学\t语文\t总分\t平均分\n");
while (pMove != NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num,
pMove->data.name, pMove->data.sex, pMove->data.math,
pMove->data.chinese, pMove->data.sum, pMove->data.average);
//printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", pMove->data.num, 修改
// pMove->data.name, pMove->data.sex, pMove->data.math,
// pMove->data.chinese, pMove->data.sum, pMove->data.average);
pMove = pMove->next;
}
printf("\n");
}
int menu()
{
printf("--------------------[学生信息管理系统]------------------\n");
printf("\t\t0.退出系统\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("------------------------------------------------------\n");
return 0;
}
struct Node* list = createList();
void keydown()
{
int choice = 0;
struct Node* result;
struct student data;
struct Node* headNode, fileName;
scanf_s("%d", &choice);
switch (choice)
{
case 0:
writeInfoToFile(list, "1.txt"); // 修改
printf("退出系统\n");
system("pause");
exit(0);
break;
case 1:
printf("---------------[添加学生]--------------\n");
printf("请输入学生学号,姓名,性别,数学成绩,语文成绩:");
fflush(stdin);
scanf_s("%s%s%s%d%d", data.num,20,data.name,20,data.sex,5,&data.math, &data.chinese);
//scanf_s("%d%s%s%d%d%d%d", data.num, &data.name, 修改
// data.sex, data.math, data.chinese, data.sum, data.average); 修改
data.sum = data.math + data.chinese;
data.average = data.sum / 2; //data.average = data.sum / 3; 修改
insertNodeByHead(list, data);
break;
case 2:
printf("--------------【显示学生信息】---------\n");
printfList(list);
break;
case 3:
printf("---------------【修改学生信息】---------\n");
printf("请输入需要修改信息的学生姓名");
scanf_s("%s", data.name , 20);
result = searchInfoByData(list, data.name);
if (result == NULL) //if (searchInfoByData(list, data.name) == NULL) 修改
{
printf("未找到相关信息,无法修改,请重试!\n");
system("pause");
}
else
{
//FILE *fp; 修改
//printfList(list); 修改
printf("请输入需要修改的信息:学号,姓名,性别,数学成绩,语文成绩:\n");
scanf_s("%s%s%s%d%d", result->data.num, 20, result->data.name, 20,
result->data.sex, 5, &result->data.math, &result->data.chinese);
result->data.sum = result->data.math + result->data.chinese;
result->data.average = result->data.sum / 2;
// scanf("%d%s%s%d%d%d%d", data.num, 修改
// &data.name, data.sex, data.math, data.chinese, data.sum, data.average);
}
break;
case 4:
printf("---------------【删除学生信息】--\n");
printf("请输入删除的学生姓名");
scanf_s("%s", data.name,20);
deleteAppoinNode(list, data.name);
//if (deleteAppoinNode(list, data.name) == NULL);
//{
// printf("未找到相关信息,无法删除\n");
break;
case 5:
printf("------------【查找学生信息】--------\n");
printf("请输入查找的学生姓名");
scanf_s("%s", data.name , 20);
result = searchInfoByData(list, data.name); // 修改
if (result == NULL) //if (searchInfoByData(list, data.name) == NULL) 修改
{
printf("未找到相关信息\n");
system("pause");
}
else
{
printf("学号\t姓名\t性别\t数学成绩\t语文成绩\t总分\t平均分\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\n", result->data.num, result->data.name,result->data.sex,
result->data.math, result->data.chinese, result->data.sum, result->data.average);
//printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n", data.num, 修改
// data.name, data.sex, data.math, data.chinese, data.sum, data.average);
}
break;
case 6:
printf("--------------【排序记录】----------\n");
system("pause");
break;
default:
printf("输入错误,请重试\n");
system("pause");
break;
}
//writeInfoToFile(list, "1.txt"); 修改
return;
}
int _tmain(int argc, _TCHAR* argv[])//; 行尾多余分号 ";"
{
readInfoFromFile(list, "1.txt"); //readInfoFronFile() 函数名错误
while (1)
{
menu();
keydown();
system("pause");
system("cls");
}
return 0;
//} 修改
}