과정 작업(데이터 구조 실현-작업 1:학생 학적 관리 절차)
11202 단어 데이터 구조
학생 학적 관 리 는 일반적으로 데이터 베 이 스 를 바탕 으로 하 는 관리 정보 시스템(MIS)시스템 을 사용 하지만 우 리 는 데이터 베이스 기술 을 사용 하지 않 고 데이터 구조 struct 와 링크 조작 으로 관리 임 무 를 완성 하도록 요구한다.
작업 설명
데이터 구 조 를 사용 하여 학생 을 표시 하고 학생 의 관련 정 보 를 기록한다.학생 정 보 는 학 번 sno,이름 sname,나이 sage,전공 sprof,학급 sclass 를 포함한다.합 리 적 인 데이터 구 조 를 설계 하여 이 정 보 를 수용 하 십시오.
학생 들 의 추가,수정,삭제,조회 등 기본 적 인 상용 작업 을 완성 합 니 다.
링크 를 사용 하여 학생 이 있 는 반 의 대열 을 표시 하 다.
배경 지식
1.데이터 구조.
2.체인 시계.
코드 구현 은 다음 과 같 습 니 다.
간단 한 코드 를 발견 해도 쓰기 가 쉽 지 않다.
생각 을 많이 할 수록 생각 나 는 부분 이 많 습 니 다.가짜 인터페이스 니까 그렇게 하 세 요.
코드 프레임 워 크 는 다음 과 같 습 니 다:
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student {
private :
char sno[15];
int sage;
char sclass[15];
char sname[15];
char sprof[15];
Student *next;
typedef Student* Stu;
public :
Student() {
// ,
}
void Insert(Student &stu) {
//
}
bool Search(char cur_sno[], Stu &res_pre) {
//
}
bool Delete(char Delete_sno[]) {
//
}
void Modify(Student &stu) {//
// stu( Modify_info )
}
// ,
/*---------------------------------------------------------------*/
void Input_Stu_Info(Student &stu) {
// ( sno )
}
void Back_Or_Not(int n) {
//
}
void Check_back_root(char str[]) {
// 。
}
int Input() {// , ,
}
void Frame() {//
}
// ...
/*---------------------------------------------------------------*/
void Add_info() {
//
// , Insert()
}
void Modify_info() {
//
// , Modify()
}
void Delete_info() {
//
// , Delete()
}
void Search_info() {
//
// , Search()
}
void Print_All() {
//
}
// 5
/*---------------------------------------------------------------*/
};
int main() {
Student StuList;
StuList.Frame();
return 0;
}
코드 구현 은 다음 과 같 습 니 다.
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student {
private :
char sno[15];
int sage;
char sclass[15];
char sname[15];
char sprof[15];
Student *next;
typedef Student* Stu;
public :
Student() {
memset(sno, 0, sizeof(sno));
memset(sname, 0, sizeof(sclass));
memset(sname, 0, sizeof(sname));
memset(sprof, 0, sizeof(sprof));
next = NULL;
}
void Insert(Student &stu) {
Stu p = this;
while (p->next && strcmp(p->next->sno, stu.sno) < 0) {
p = p->next;
}
Stu tmp = p->next;
p->next = &stu;
p = p->next;
p->next = tmp;
}
bool Search(char cur_sno[], Stu &res_pre) {
Stu p = this;
while (p->next) {
if (strcmp(p->next->sno, cur_sno) == 0) {
res_pre = p;//res
//printf("%s--
", res_pre->next->sno);
return true;
}
p = p->next;
}
return false;
}
bool Delete(char Delete_sno[]) {
Stu res_pre = this;
if (Search(Delete_sno, res_pre)) {
Stu res = res_pre->next;
res_pre->next = res->next;
delete(res);
puts("\t ");
return true;
} else {
puts("\t , !");
return false;
}
}
void Modify(Student &stu) {
printf("\t %s :", stu.sno);
puts("\t \t \t \t ");
printf("\t%s\t%d\t%s\t%s
", stu.sname, stu.sage, stu.sprof, stu.sclass);
printf("\t ( ):
");
Input_Stu_Info(stu);
}
/*----------------------------------------------------------------------------*/
void Input_Stu_Info(Student &stu) {
printf("\t");
scanf("%s", stu.sname);
Check_back_root(stu.sname);
printf("\t");
int check_age = Input();
if (check_age >= 0 && check_age <= 100) {
stu.sage = check_age;
}
printf("\t");
scanf("%s", stu.sprof);
Check_back_root(stu.sprof);
printf("\t");
scanf("%s", stu.sclass);
Check_back_root(stu.sclass);
printf("
");
}
void Back_Or_Not(int n) {
puts(" ═════ 0, 1 ═════
");
int check_in = Input();
while (!(check_in >= 0 && check_in <= 1)) {
printf(" , : ");
check_in = Input();
}//
if (check_in == 0) {
switch(n) {
case 1: Add_info(); break;
case 2: Modify_info(); break;
case 3: Delete_info(); break;
case 4: Search_info(); break;
default : break;
}
} else {
Frame();
}
}
void Check_back_root(char str[]) {
if (strcmp(str, "250") == 0) {
Frame();
}
}
int Input() {// ,
int i, k = 0;
char stmp[110], str[110];
scanf("%s", str);
Check_back_root(str);
for (i = 0; str[i]; i++) {
if (!(str[i] >= '0' && str[i] <= '9')) {
return -1;
} else {
stmp[k++] = str[i];
}
}
int r = 1, sum = 0;
for (i = k - 1; i >= 0; i--, r *= 10) {
sum += (str[i] - '0') * r;
}
return sum;
}
void Frame() {
system("cls");
puts("╓************************** **************************╖");
puts("║ ║");
puts("║ Author info -- class: abcdefgh name: XXX stu.no: 33333333 ║");
puts("╠════════════════╦═════════════════╣");
puts("║ ║ ║");
puts("║ 1: ║ 2: ║");
puts("║ ║ ║");
puts("╠════════════════╬═════════════════╣");
puts("║ ║ ║");
puts("║ 3: ║ 4: ║");
puts("║ ║ ║");
puts("╠════════════════╬═════════════════╣");
puts("║ ║ Notice: ║");
puts("║ 5: ║ ( 250) ║");
puts("║ ║ 250 ║");
puts("╚════════════════╩═════════════════╝"); // , , 。。
printf(" :");
int check_in = Input();
while (!(check_in >= 1 && check_in <= 6)) {
printf(" , : ");
check_in = Input();
}//
switch(check_in) {//
case 1:
Add_info();
case 2:
Modify_info();
break;
case 3:
Delete_info();
break;
case 4:
Search_info();
break;
case 5:
Print_All();
break;
default :break;
}
}
/*----------------------------------------------------------------------------*/
void Add_info() {
system("cls");
puts("╓******************** ************************╖
");
puts(" Notice: 250
");
puts("\t ( )
");
puts("\t \t \t \t \t
");
Student stu, *res_pre = this;
char stmp[110], str[110];
bool flag, OK = false;
int i, k = 0;
while (!OK) {
printf("\t");
scanf("%s", str);
Check_back_root(str);
flag = false;
while (!flag) {
flag = true;
k = 0;
for (i = 0; str[i]; i++) {
if (!(str[i] >= '0' && str[i] <= '9')) {
flag = false;
break;
} else {
stmp[k++] = str[i];
}
}
}
stmp[k] = 0;
if (Search(str, res_pre)) {
puts("\t , , 。");
} else {
OK = true;
}
}
strcpy(stu.sno, stmp);
Input_Stu_Info(stu);
Insert(stu);
puts(" congratulation! !
");
Back_Or_Not(1);
}
void Modify_info() {
char str[110];
Stu res_pre = this;
system("cls");
puts("╓******************** ************************╖
");
puts(" Notice: 250
");
printf("\t :
\t");
scanf("%s", str);
Check_back_root(str);
while (!Search(str, res_pre)) {
puts("\t , ");
printf("\t");
scanf("%s", str);
Check_back_root(str);
}
Modify(*(res_pre->next));
puts(" congratulation! !
");
Back_Or_Not(2);
}
void Delete_info() {
system("cls");
char str[110];
puts("╓********************** **********************╖
");
puts(" Notice: 250
");
printf("\t :
\t");
scanf("%s", str);
Check_back_root(str);
while (!Delete(str)) {
//puts("\t , :");Delete
printf("\t");
scanf("%s", str);
Check_back_root(str);
}
Back_Or_Not(3);
}
void Search_info() {
system("cls");
char str[110];
Stu res_pre = this;
puts("╓********************** **********************╖
");
puts(" Notice: 250
");
printf("\t :
\t");
scanf("%s", str);
Check_back_root(str);
while (!Search(str, res_pre)) {
puts("\t , :");
printf("\t");
scanf("%s", str);
Check_back_root(str);
}
Student stu = *(res_pre->next);
printf(" :");
puts("\t \t \t \t \t
");
printf("\t%s\t%s\t%d\t%s\t%s
", stu.sno, stu.sname, stu.sage, stu.sprof, stu.sclass);
Back_Or_Not(4);
}
void Print_All() {
system("cls");
Stu p = this;
Student stu;
puts("╓********************* **********************╖
");
puts(" Notice: 250
");
if (!p->next) {
puts("\t !");
}
puts("\t \t \t \t \t
");
for ( ; p->next; p = p->next) {
stu = *p->next;
printf("\t%s\t%s\t%d\t%s\t%s
", stu.sno, stu.sname, stu.sage, stu.sprof, stu.sclass);
}
system("pause");
Frame();
system("cls");
}
};
int main() {
Student StuList;
StuList.Frame();
return 0;
}
오리지널 글 은 전재 할 때 다음 과 같이 명시 해 주 십시오. { 잊어버리다 }
본문 주소: http://www.cnblogs.com/slave_wc