├── 2014 ├── Makefile ├── linktable.c ├── linktable.h ├── menu.c ├── menu.h ├── readme.txt ├── test.c └── utest │ ├── Makefile │ ├── linktable.c │ ├── linktable.h │ └── test.c ├── README.md ├── ase2013 ├── Makefile ├── datastore │ ├── Makefile │ ├── datastore.c │ ├── datastore.h │ └── test.c ├── linktable.c ├── linktable.h ├── linktable │ ├── Makefile │ ├── linktable.c │ ├── linktable.h │ └── testlinktable.c └── students.c ├── menu_v1.0.tar.gz ├── se2019.md ├── se2019 ├── ASE_1_SoftwareEngineering.pdf ├── ASE_1_intro.pdf ├── ASE_2_Coding_Exercise.pdf ├── Capturing_the_Requirements.pdf ├── DesignPatterns.pdf ├── Designing_the_Modules.pdf ├── DomainModeling.pdf ├── Modeling-the-Process-and-Life-Cycle.pptx ├── MongoDB数据库设计.pdf ├── MongoDB数据库设计.pptx ├── OO-UML.pdf ├── ObjectInteractionModeling-DesignClassDiagram.pdf ├── README.md ├── Testing_the_Programs.pptx ├── Tools.pdf ├── UseCaseModeling.pdf ├── Writing_the_Programs.pdf └── 网络安全等级保护.pptx ├── se2020.md └── se2020 ├── 1软件工程-码农的自我修养.pdf ├── README.md ├── Tools - Typing - VSCode - Git - Vim - RegEx.pdf ├── menu.zip ├── se_code.zip └── 工程化编程实战.pdf /2014/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile for Menu Program 3 | # 4 | 5 | CC_PTHREAD_FLAGS = -lpthread 6 | CC_FLAGS = -c 7 | CC_OUTPUT_FLAGS = -o 8 | CC = gcc 9 | RM = rm 10 | RM_FLAGS = -f 11 | 12 | TARGET = test 13 | OBJS = linktable.o menu.o test.o 14 | 15 | all: $(OBJS) 16 | $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS) 17 | 18 | .c.o: 19 | $(CC) $(CC_FLAGS) $< 20 | 21 | clean: 22 | $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) *.bak 23 | -------------------------------------------------------------------------------- /2014/linktable.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : linktabe.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * Provide right Callback interface by Mengning,2012/09/17 20 | * 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include"linktable.h" 27 | 28 | /* 29 | * LinkTable Type 30 | */ 31 | struct LinkTable 32 | { 33 | tLinkTableNode *pHead; 34 | tLinkTableNode *pTail; 35 | int SumOfNode; 36 | pthread_mutex_t mutex; 37 | 38 | }; 39 | 40 | 41 | /* 42 | * Create a LinkTable 43 | */ 44 | tLinkTable * CreateLinkTable() 45 | { 46 | tLinkTable * pLinkTable = (tLinkTable *)malloc(sizeof(tLinkTable)); 47 | if(pLinkTable == NULL) 48 | { 49 | return NULL; 50 | } 51 | pLinkTable->pHead = NULL; 52 | pLinkTable->pTail = NULL; 53 | pLinkTable->SumOfNode = 0; 54 | pthread_mutex_init(&(pLinkTable->mutex), NULL); 55 | return pLinkTable; 56 | } 57 | 58 | /* 59 | * Delete a LinkTable 60 | */ 61 | int DeleteLinkTable(tLinkTable *pLinkTable) 62 | { 63 | if(pLinkTable == NULL) 64 | { 65 | return FAILURE; 66 | } 67 | while(pLinkTable->pHead != NULL) 68 | { 69 | tLinkTableNode * p = pLinkTable->pHead; 70 | pthread_mutex_lock(&(pLinkTable->mutex)); 71 | pLinkTable->pHead = pLinkTable->pHead->pNext; 72 | pLinkTable->SumOfNode -= 1 ; 73 | pthread_mutex_unlock(&(pLinkTable->mutex)); 74 | free(p); 75 | } 76 | pLinkTable->pHead = NULL; 77 | pLinkTable->pTail = NULL; 78 | pLinkTable->SumOfNode = 0; 79 | pthread_mutex_destroy(&(pLinkTable->mutex)); 80 | free(pLinkTable); 81 | return SUCCESS; 82 | } 83 | 84 | /* 85 | * Add a LinkTableNode to LinkTable 86 | */ 87 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 88 | { 89 | if(pLinkTable == NULL || pNode == NULL) 90 | { 91 | return FAILURE; 92 | } 93 | pNode->pNext = NULL; 94 | pthread_mutex_lock(&(pLinkTable->mutex)); 95 | if(pLinkTable->pHead == NULL) 96 | { 97 | pLinkTable->pHead = pNode; 98 | } 99 | if(pLinkTable->pTail == NULL) 100 | { 101 | pLinkTable->pTail = pNode; 102 | } 103 | else 104 | { 105 | pLinkTable->pTail->pNext = pNode; 106 | pLinkTable->pTail = pNode; 107 | } 108 | pLinkTable->SumOfNode += 1 ; 109 | pthread_mutex_unlock(&(pLinkTable->mutex)); 110 | return SUCCESS; 111 | } 112 | 113 | /* 114 | * Delete a LinkTableNode from LinkTable 115 | */ 116 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 117 | { 118 | if(pLinkTable == NULL || pNode == NULL) 119 | { 120 | return FAILURE; 121 | } 122 | pthread_mutex_lock(&(pLinkTable->mutex)); 123 | if(pLinkTable->pHead == pNode) 124 | { 125 | pLinkTable->pHead = pLinkTable->pHead->pNext; 126 | pLinkTable->SumOfNode -= 1 ; 127 | if(pLinkTable->SumOfNode == 0) 128 | { 129 | pLinkTable->pTail = NULL; 130 | } 131 | pthread_mutex_unlock(&(pLinkTable->mutex)); 132 | return SUCCESS; 133 | } 134 | tLinkTableNode * pTempNode = pLinkTable->pHead; 135 | while(pTempNode != NULL) 136 | { 137 | if(pTempNode->pNext == pNode) 138 | { 139 | pTempNode->pNext = pTempNode->pNext->pNext; 140 | pLinkTable->SumOfNode -= 1 ; 141 | if(pLinkTable->SumOfNode == 0) 142 | { 143 | pLinkTable->pTail = NULL; 144 | } 145 | pthread_mutex_unlock(&(pLinkTable->mutex)); 146 | return SUCCESS; 147 | } 148 | pTempNode = pTempNode->pNext; 149 | } 150 | pthread_mutex_unlock(&(pLinkTable->mutex)); 151 | return FAILURE; 152 | } 153 | 154 | /* 155 | * Search a LinkTableNode from LinkTable 156 | * int Conditon(tLinkTableNode * pNode); 157 | */ 158 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)) 159 | { 160 | if(pLinkTable == NULL || Conditon == NULL) 161 | { 162 | return NULL; 163 | } 164 | tLinkTableNode * pNode = pLinkTable->pHead; 165 | while(pNode != NULL) 166 | { 167 | if(Conditon(pNode) == SUCCESS) 168 | { 169 | return pNode; 170 | } 171 | pNode = pNode->pNext; 172 | } 173 | return NULL; 174 | } 175 | 176 | /* 177 | * get LinkTableHead 178 | */ 179 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable) 180 | { 181 | if(pLinkTable == NULL) 182 | { 183 | return NULL; 184 | } 185 | return pLinkTable->pHead; 186 | } 187 | 188 | /* 189 | * get next LinkTableNode 190 | */ 191 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 192 | { 193 | if(pLinkTable == NULL || pNode == NULL) 194 | { 195 | return NULL; 196 | } 197 | tLinkTableNode * pTempNode = pLinkTable->pHead; 198 | while(pTempNode != NULL) 199 | { 200 | if(pTempNode == pNode) 201 | { 202 | return pTempNode->pNext; 203 | } 204 | pTempNode = pTempNode->pNext; 205 | } 206 | return NULL; 207 | } 208 | 209 | -------------------------------------------------------------------------------- /2014/linktable.h: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : linktabe.h */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * 20 | */ 21 | 22 | #ifndef _LINK_TABLE_H_ 23 | #define _LINK_TABLE_H_ 24 | 25 | #include 26 | 27 | #define SUCCESS 0 28 | #define FAILURE (-1) 29 | 30 | /* 31 | * LinkTable Node Type 32 | */ 33 | typedef struct LinkTableNode 34 | { 35 | struct LinkTableNode * pNext; 36 | }tLinkTableNode; 37 | 38 | /* 39 | * LinkTable Type 40 | */ 41 | typedef struct LinkTable tLinkTable; 42 | 43 | /* 44 | * Create a LinkTable 45 | */ 46 | tLinkTable * CreateLinkTable(); 47 | /* 48 | * Delete a LinkTable 49 | */ 50 | int DeleteLinkTable(tLinkTable *pLinkTable); 51 | /* 52 | * Add a LinkTableNode to LinkTable 53 | */ 54 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 55 | /* 56 | * Delete a LinkTableNode from LinkTable 57 | */ 58 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 59 | /* 60 | * Search a LinkTableNode from LinkTable 61 | * int Conditon(tLinkTableNode * pNode); 62 | */ 63 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)); 64 | /* 65 | * get LinkTableHead 66 | */ 67 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable); 68 | /* 69 | * get next LinkTableNode 70 | */ 71 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 72 | 73 | #endif /* _LINK_TABLE_H_ */ 74 | 75 | 76 | -------------------------------------------------------------------------------- /2014/menu.c: -------------------------------------------------------------------------------- 1 | 2 | /**************************************************************************************************/ 3 | /* Copyright (C) mc2lab.com, SSE@USTC, 2014-2015 */ 4 | /* */ 5 | /* FILE NAME : menu.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : menu */ 8 | /* MODULE NAME : menu */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2014/08/31 */ 12 | /* DESCRIPTION : This is a menu program */ 13 | /**************************************************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning, 2014/08/31 19 | * 20 | */ 21 | 22 | 23 | #include 24 | #include 25 | #include "linktable.h" 26 | #include "menu.h" 27 | 28 | tLinkTable * head = NULL; 29 | int Help(); 30 | int Quit(); 31 | 32 | #define CMD_MAX_LEN 128 33 | #define DESC_LEN 1024 34 | #define CMD_NUM 10 35 | 36 | /* data struct and its operations */ 37 | 38 | typedef struct DataNode 39 | { 40 | tLinkTableNode * pNext; 41 | char* cmd; 42 | char* desc; 43 | int (*handler)(); 44 | } tDataNode; 45 | 46 | int SearchConditon(tLinkTableNode * pLinkTableNode,void * arg) 47 | { 48 | char * cmd = (char*)arg; 49 | tDataNode * pNode = (tDataNode *)pLinkTableNode; 50 | if(!strcmp(pNode->cmd, cmd)) 51 | { 52 | return SUCCESS; 53 | } 54 | return FAILURE; 55 | } 56 | /* find a cmd in the linklist and return the datanode pointer */ 57 | tDataNode* FindCmd(tLinkTable * head, char * cmd) 58 | { 59 | tDataNode * pNode = (tDataNode*)GetLinkTableHead(head); 60 | while(pNode != NULL) 61 | { 62 | if(!strcmp(pNode->cmd, cmd)) 63 | { 64 | return pNode; 65 | } 66 | pNode = (tDataNode*)GetNextLinkTableNode(head,(tLinkTableNode *)pNode); 67 | } 68 | return NULL; 69 | } 70 | 71 | /* show all cmd in listlist */ 72 | int ShowAllCmd(tLinkTable * head) 73 | { 74 | tDataNode * pNode = (tDataNode*)GetLinkTableHead(head); 75 | while(pNode != NULL) 76 | { 77 | printf("%s - %s\n", pNode->cmd, pNode->desc); 78 | pNode = (tDataNode*)GetNextLinkTableNode(head,(tLinkTableNode *)pNode); 79 | } 80 | return 0; 81 | } 82 | 83 | int Help() 84 | { 85 | ShowAllCmd(head); 86 | return 0; 87 | } 88 | 89 | /* add cmd to menu */ 90 | int MenuConfig(char * cmd, char * desc, int (*handler)()) 91 | { 92 | tDataNode* pNode = NULL; 93 | if ( head == NULL) 94 | { 95 | head = CreateLinkTable(); 96 | pNode = (tDataNode*)malloc(sizeof(tDataNode)); 97 | pNode->cmd = "help"; 98 | pNode->desc = "Menu List:"; 99 | pNode->handler = Help; 100 | AddLinkTableNode(head,(tLinkTableNode *)pNode); 101 | } 102 | pNode = (tDataNode*)malloc(sizeof(tDataNode)); 103 | pNode->cmd = cmd; 104 | pNode->desc = desc; 105 | pNode->handler = handler; 106 | AddLinkTableNode(head,(tLinkTableNode *)pNode); 107 | return 0; 108 | } 109 | 110 | /* Menu Engine Execute */ 111 | int ExecuteMenu() 112 | { 113 | /* cmd line begins */ 114 | while(1) 115 | { 116 | char cmd[CMD_MAX_LEN]; 117 | printf("Input a cmd number > "); 118 | scanf("%s", cmd); 119 | tDataNode *p = (tDataNode*)SearchLinkTableNode(head,SearchConditon,(void*)cmd); 120 | if( p == NULL) 121 | { 122 | printf("This is a wrong cmd!\n "); 123 | continue; 124 | } 125 | printf("%s - %s\n", p->cmd, p->desc); 126 | if(p->handler != NULL) 127 | { 128 | p->handler(); 129 | } 130 | 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /2014/menu.h: -------------------------------------------------------------------------------- 1 | 2 | /**************************************************************************************************/ 3 | /* Copyright (C) mc2lab.com, SSE@USTC, 2014-2015 */ 4 | /* */ 5 | /* FILE NAME : menu.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : menu */ 8 | /* MODULE NAME : menu */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2014/08/31 */ 12 | /* DESCRIPTION : This is a menu program */ 13 | /**************************************************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning, 2014/08/31 19 | * 20 | */ 21 | 22 | /* add cmd to menu */ 23 | int MenuConfig(char * cmd, char * desc, int (*handler)()); 24 | 25 | /* Menu Engine Execute */ 26 | int ExecuteMenu(); 27 | 28 | -------------------------------------------------------------------------------- /2014/readme.txt: -------------------------------------------------------------------------------- 1 | This is a menu program! 2 | 3 | Build Procedure 4 | $ make clean 5 | $ make 6 | $ ./menu # you can input help/version/quit cmd. 7 | -------------------------------------------------------------------------------- /2014/test.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "menu.h" 4 | 5 | int Quit() 6 | { 7 | /* add XXX clean ops */ 8 | exit(0); 9 | } 10 | 11 | int main() 12 | { 13 | 14 | MenuConfig("version","XXX V1.0(Menu program v1.0 inside)",NULL); 15 | MenuConfig("quit","Quit from XXX",Quit); 16 | 17 | ExecuteMenu(); 18 | } 19 | 20 | -------------------------------------------------------------------------------- /2014/utest/Makefile: -------------------------------------------------------------------------------- 1 | 2 | all: 3 | gcc -c test.c -o test.o 4 | gcc -c linktable.c -o linktable.o 5 | gcc linktable.o test.o -o test 6 | 7 | clean: 8 | rm -rf *.o test 9 | -------------------------------------------------------------------------------- /2014/utest/linktable.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : linktabe.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * 20 | */ 21 | #include 22 | #include"linktable.h" 23 | 24 | 25 | /* 26 | * LinkTable Type 27 | */ 28 | struct LinkTable 29 | { 30 | ; 31 | }; 32 | 33 | /* 34 | * Create a LinkTable 35 | */ 36 | tLinkTable * CreateLinkTable() 37 | { 38 | return NULL; 39 | } 40 | /* 41 | * Delete a LinkTable 42 | */ 43 | int DeleteLinkTable(tLinkTable *pLinkTable) 44 | { 45 | 46 | } 47 | /* 48 | * Add a LinkTableNode to LinkTable 49 | */ 50 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 51 | { 52 | if(pLinkTable == NULL || pNode == NULL) 53 | { 54 | return FAILURE; 55 | } 56 | return SUCCESS; 57 | } 58 | /* 59 | * Delete a LinkTableNode from LinkTable 60 | */ 61 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 62 | { 63 | 64 | } 65 | /* 66 | * Search a LinkTableNode from LinkTable 67 | * int Conditon(tLinkTableNode * pNode); 68 | */ 69 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)) 70 | { 71 | 72 | } 73 | /* 74 | * get LinkTableHead 75 | */ 76 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable) 77 | { 78 | 79 | } 80 | /* 81 | * get next LinkTableNode 82 | */ 83 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 84 | { 85 | 86 | } 87 | 88 | -------------------------------------------------------------------------------- /2014/utest/linktable.h: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : linktabe.h */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * 20 | */ 21 | 22 | #ifndef _LINK_TABLE_H_ 23 | #define _LINK_TABLE_H_ 24 | 25 | 26 | #define SUCCESS 0 27 | #define FAILURE (-1) 28 | 29 | /* 30 | * LinkTable Node Type 31 | */ 32 | typedef struct LinkTableNode 33 | { 34 | struct LinkTableNode * pNext; 35 | }tLinkTableNode; 36 | 37 | /* 38 | * LinkTable Type 39 | */ 40 | typedef struct LinkTable tLinkTable; 41 | 42 | /* 43 | * Create a LinkTable 44 | */ 45 | tLinkTable * CreateLinkTable(); 46 | /* 47 | * Delete a LinkTable 48 | */ 49 | int DeleteLinkTable(tLinkTable *pLinkTable); 50 | /* 51 | * Add a LinkTableNode to LinkTable 52 | */ 53 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 54 | /* 55 | * Delete a LinkTableNode from LinkTable 56 | */ 57 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 58 | /* 59 | * Search a LinkTableNode from LinkTable 60 | * int Conditon(tLinkTableNode * pNode); 61 | */ 62 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)); 63 | /* 64 | * get LinkTableHead 65 | */ 66 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable); 67 | /* 68 | * get next LinkTableNode 69 | */ 70 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 71 | 72 | #endif /* _LINK_TABLE_H_ */ 73 | 74 | 75 | -------------------------------------------------------------------------------- /2014/utest/test.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include"linktable.h" 3 | 4 | #define debug 5 | 6 | int results[3] = {1,1,1}; 7 | char * info[3] = 8 | { 9 | {"test report"}, 10 | {"TC1 CreateLinkTable"}, 11 | {"TC2.1...."} 12 | }; 13 | 14 | int main() 15 | { 16 | int i; 17 | tLinkTable *p = CreateLinkTable(); 18 | if(p == NULL) 19 | { 20 | debug("TC1 fail\n"); 21 | results[1] = 1; 22 | } 23 | tLinkTableNode * pNode = NULL; 24 | int ret = AddLinkTableNode(p,pNode); 25 | if(ret == FAILURE) 26 | { 27 | debug("TC2.1 Succ\n"); 28 | results[2] = 0; 29 | } 30 | /* more test case ...*/ 31 | 32 | /* test report */ 33 | printf("test report\n"); 34 | for(i=1;i<=2;i++) 35 | { 36 | if(results[i] == 1) 37 | { 38 | printf("Testcase Number%d F - %s\n",i,info[i]); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ase 2 | === 3 | 4 | 软件工程课程资料 5 | -------------------------------------------------------------------------------- /ase2013/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile for Students system 3 | # 4 | 5 | CC_PTHREAD_FLAGS = -lpthread 6 | CC_FLAGS = -c 7 | CC_OUTPUT_FLAGS = -o 8 | CC = gcc 9 | RM = rm 10 | RM_FLAGS = -f 11 | 12 | TARGET = students 13 | OBJS = linktable.o students.o 14 | 15 | all: $(OBJS) 16 | $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS) 17 | 18 | .c.o: 19 | $(CC) $(CC_FLAGS) $< 20 | 21 | clean: 22 | 23 | $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) -------------------------------------------------------------------------------- /ase2013/datastore/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile for Datastore 3 | # 4 | 5 | CC_PTHREAD_FLAGS = -lpthread 6 | CC_FLAGS = -c 7 | CC_OUTPUT_FLAGS = -o 8 | CC = gcc 9 | RM = rm 10 | RM_FLAGS = -f 11 | 12 | TARGET = test 13 | OBJS = datastore.o test.o 14 | 15 | all: $(OBJS) 16 | $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS) 17 | 18 | test: 19 | echo ./test100 20 | echo ./test100 21 | 22 | .c.o: 23 | $(CC) $(CC_FLAGS) $< 24 | 25 | clean: 26 | 27 | $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) *.bak -------------------------------------------------------------------------------- /ase2013/datastore/datastore.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : datastore.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : datastore */ 8 | /* MODULE NAME : datastore */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/09/23 */ 12 | /* DESCRIPTION : datastore implementation */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Create test stub,by Mengning,2012/09/23 19 | * 20 | */ 21 | 22 | #include 23 | #include 24 | 25 | #include"datastore.h" 26 | 27 | tLinkTable LinkTable; 28 | tLinkTableNode * gNode = NULL; 29 | 30 | /* 31 | * Create a LinkTable 32 | */ 33 | tLinkTable * CreateLinkTable() 34 | { 35 | return &LinkTable; 36 | } 37 | /* 38 | * Delete a LinkTable 39 | */ 40 | int DeleteLinkTable(tLinkTable *pLinkTable) 41 | { 42 | if(pLinkTable == NULL) 43 | { 44 | return FAILURE; 45 | } 46 | return SUCCESS; 47 | } 48 | /* 49 | * Add a LinkTableNode to LinkTable 50 | */ 51 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 52 | { 53 | if(pLinkTable == NULL || pNode == NULL) 54 | { 55 | return FAILURE; 56 | } 57 | gNode = pNode; 58 | return SUCCESS; 59 | } 60 | /* 61 | * Delete a LinkTableNode from LinkTable 62 | */ 63 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 64 | { 65 | if(pLinkTable == NULL || pNode == NULL) 66 | { 67 | return FAILURE; 68 | } 69 | gNode = NULL; 70 | return SUCCESS; 71 | } 72 | 73 | /* 74 | * Search a LinkTableNode from LinkTable 75 | * int Conditon(tLinkTableNode * pNode); 76 | */ 77 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)) 78 | { 79 | if(pLinkTable == NULL || Conditon == NULL) 80 | { 81 | return NULL; 82 | } 83 | if(Conditon(gNode) == SUCCESS) 84 | { 85 | return gNode; 86 | } 87 | return NULL; 88 | } 89 | 90 | /* 91 | * get LinkTableHead 92 | */ 93 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable) 94 | { 95 | if(pLinkTable == NULL) 96 | { 97 | return NULL; 98 | } 99 | return gNode; 100 | } 101 | 102 | /* 103 | * get next LinkTableNode 104 | */ 105 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 106 | { 107 | if(pLinkTable == NULL || pNode == NULL) 108 | { 109 | return NULL; 110 | } 111 | return gNode; 112 | } 113 | 114 | -------------------------------------------------------------------------------- /ase2013/datastore/datastore.h: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : datastore.h */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : datastore */ 8 | /* MODULE NAME : datastore */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of datastore */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * Change name as datastore.h,by Mengning,2012/09/23 20 | * 21 | */ 22 | 23 | #ifndef _DATA_STORE_H_ 24 | #define _DATA_STORE_H_ 25 | 26 | #include 27 | 28 | #define SUCCESS 0 29 | #define FAILURE (-1) 30 | 31 | /* 32 | * LinkTable Node Type 33 | */ 34 | typedef struct LinkTableNode 35 | { 36 | struct LinkTableNode * pNext; 37 | }tLinkTableNode; 38 | 39 | /* 40 | * LinkTable Type 41 | */ 42 | typedef struct LinkTable 43 | { 44 | tLinkTableNode *pHead; 45 | tLinkTableNode *pTail; 46 | int SumOfNode; 47 | pthread_mutex_t mutex; 48 | 49 | }tLinkTable; 50 | 51 | /* 52 | * Create a LinkTable 53 | */ 54 | tLinkTable * CreateLinkTable(); 55 | /* 56 | * Delete a LinkTable 57 | */ 58 | int DeleteLinkTable(tLinkTable *pLinkTable); 59 | /* 60 | * Add a LinkTableNode to LinkTable 61 | */ 62 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 63 | /* 64 | * Delete a LinkTableNode from LinkTable 65 | */ 66 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 67 | /* 68 | * Search a LinkTableNode from LinkTable 69 | * int Conditon(tLinkTableNode * pNode); 70 | */ 71 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)); 72 | /* 73 | * get LinkTableHead 74 | */ 75 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable); 76 | /* 77 | * get next LinkTableNode 78 | */ 79 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 80 | 81 | #endif /* _DATA_STORE_H_ */ 82 | 83 | 84 | -------------------------------------------------------------------------------- /ase2013/datastore/test.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : test.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : datastore */ 8 | /* MODULE NAME : datastore */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : test of datastore */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * Verified callback and head/next for search by Mengning,2012/09/17 20 | * 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | #include"datastore.h" 27 | 28 | #define debug 29 | 30 | typedef struct Node 31 | { 32 | tLinkTableNode * pNext; 33 | int data; 34 | }tNode; 35 | 36 | tNode * Search(tLinkTable *pLinkTable); 37 | int SearchConditon(tLinkTableNode * pLinkTableNode); 38 | 39 | int main() 40 | { 41 | int i; 42 | tLinkTable * pLinkTable = CreateLinkTable(); 43 | if(pLinkTable != NULL) 44 | { 45 | printf("UserCase 001:Pass\n"); 46 | } 47 | for(i = 0; i < 10; i++) 48 | { 49 | tNode* pNode = (tNode*)malloc(sizeof(tNode)); 50 | pNode->data = 5; 51 | debug("AddLinkTableNode\n"); 52 | AddLinkTableNode(pLinkTable,(tLinkTableNode *)pNode); 53 | } 54 | /* search by callback */ 55 | debug("SearchLinkTableNode\n"); 56 | tNode* pTempNode = (tNode*)SearchLinkTableNode(pLinkTable,SearchConditon); 57 | printf("%d\n",pTempNode->data); 58 | /* search one by one */ 59 | pTempNode = Search(pLinkTable); 60 | printf("%d\n",pTempNode->data); 61 | debug("DelLinkTableNode\n"); 62 | DelLinkTableNode(pLinkTable,(tLinkTableNode *)pTempNode); 63 | free(pTempNode); 64 | DeleteLinkTable(pLinkTable); 65 | return; 66 | } 67 | 68 | tNode * Search(tLinkTable *pLinkTable) 69 | { 70 | debug("Search GetLinkTableHead\n"); 71 | tNode * pNode = (tNode*)GetLinkTableHead(pLinkTable); 72 | while(pNode != NULL) 73 | { 74 | if(pNode->data == 5) 75 | { 76 | return pNode; 77 | } 78 | debug("GetNextLinkTableNode\n"); 79 | pNode = (tNode*)GetNextLinkTableNode(pLinkTable,(tLinkTableNode *)pNode); 80 | } 81 | return NULL; 82 | } 83 | 84 | int SearchConditon(tLinkTableNode * pLinkTableNode) 85 | { 86 | tNode * pNode = (tNode *)pLinkTableNode; 87 | if(pNode->data == 5) 88 | { 89 | return SUCCESS; 90 | } 91 | return FAILURE; 92 | } -------------------------------------------------------------------------------- /ase2013/linktable.c: -------------------------------------------------------------------------------- 1 | 2 | #include"linktable.h" 3 | 4 | tStudent * pHead = NULL; 5 | 6 | int insert(int id,int name) 7 | { 8 | tStudent * pStudent = NULL; 9 | pStudent = (tStudent *)malloc(sizeof(tStudent)); 10 | pStudent->id = id; 11 | pStudent->name = name; 12 | pStudent->next = pHead; 13 | pHead = pStudent; 14 | } 15 | tStudent* search(int id) 16 | { 17 | tStudent * pStudent = NULL; 18 | pStudent = pHead; 19 | while(pStudent->id != id) 20 | { 21 | pStudent = pStudent->next; 22 | } 23 | printf("find student %d\n",pStudent->id); 24 | } -------------------------------------------------------------------------------- /ase2013/linktable.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | /* Record of every student */ 5 | typedef struct Student 6 | { 7 | int id; 8 | int name; 9 | struct Student * next; 10 | }tStudent; 11 | 12 | int insert(int id,int name); 13 | tStudent* search(int id); -------------------------------------------------------------------------------- /ase2013/linktable/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile for LinkTable 3 | # 4 | 5 | CC_PTHREAD_FLAGS = -lpthread 6 | CC_FLAGS = -c 7 | CC_OUTPUT_FLAGS = -o 8 | CC = gcc 9 | RM = rm 10 | RM_FLAGS = -f 11 | 12 | TARGET = testlinktable 13 | OBJS = linktable.o testlinktable.o 14 | 15 | all: $(OBJS) 16 | $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS) 17 | 18 | .c.o: 19 | $(CC) $(CC_FLAGS) $< 20 | 21 | clean: 22 | $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) *.bak 23 | -------------------------------------------------------------------------------- /ase2013/linktable/linktable.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : linktabe.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * Provide right Callback interface by Mengning,2012/09/17 20 | * 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include"linktable.h" 27 | 28 | /* 29 | * LinkTable Type 30 | */ 31 | struct LinkTable 32 | { 33 | tLinkTableNode *pHead; 34 | tLinkTableNode *pTail; 35 | int SumOfNode; 36 | pthread_mutex_t mutex; 37 | 38 | }; 39 | 40 | 41 | /* 42 | * Create a LinkTable 43 | */ 44 | tLinkTable * CreateLinkTable() 45 | { 46 | tLinkTable * pLinkTable = (tLinkTable *)malloc(sizeof(tLinkTable)); 47 | if(pLinkTable == NULL) 48 | { 49 | return NULL; 50 | } 51 | pLinkTable->pHead = NULL; 52 | pLinkTable->pTail = NULL; 53 | pLinkTable->SumOfNode = 0; 54 | pthread_mutex_init(&(pLinkTable->mutex), NULL); 55 | return pLinkTable; 56 | } 57 | 58 | /* 59 | * Delete a LinkTable 60 | */ 61 | int DeleteLinkTable(tLinkTable *pLinkTable) 62 | { 63 | if(pLinkTable == NULL) 64 | { 65 | return FAILURE; 66 | } 67 | while(pLinkTable->pHead != NULL) 68 | { 69 | tLinkTableNode * p = pLinkTable->pHead; 70 | pthread_mutex_lock(&(pLinkTable->mutex)); 71 | pLinkTable->pHead = pLinkTable->pHead->pNext; 72 | pLinkTable->SumOfNode -= 1 ; 73 | pthread_mutex_unlock(&(pLinkTable->mutex)); 74 | free(p); 75 | } 76 | pLinkTable->pHead = NULL; 77 | pLinkTable->pTail = NULL; 78 | pLinkTable->SumOfNode = 0; 79 | pthread_mutex_destroy(&(pLinkTable->mutex)); 80 | free(pLinkTable); 81 | return SUCCESS; 82 | } 83 | 84 | /* 85 | * Add a LinkTableNode to LinkTable 86 | */ 87 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 88 | { 89 | if(pLinkTable == NULL || pNode == NULL) 90 | { 91 | return FAILURE; 92 | } 93 | pNode->pNext = NULL; 94 | pthread_mutex_lock(&(pLinkTable->mutex)); 95 | if(pLinkTable->pHead == NULL) 96 | { 97 | pLinkTable->pHead = pNode; 98 | } 99 | if(pLinkTable->pTail == NULL) 100 | { 101 | pLinkTable->pTail = pNode; 102 | } 103 | else 104 | { 105 | pLinkTable->pTail->pNext = pNode; 106 | pLinkTable->pTail = pNode; 107 | } 108 | pLinkTable->SumOfNode += 1 ; 109 | pthread_mutex_unlock(&(pLinkTable->mutex)); 110 | return SUCCESS; 111 | } 112 | 113 | /* 114 | * Delete a LinkTableNode from LinkTable 115 | */ 116 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 117 | { 118 | if(pLinkTable == NULL || pNode == NULL) 119 | { 120 | return FAILURE; 121 | } 122 | pthread_mutex_lock(&(pLinkTable->mutex)); 123 | if(pLinkTable->pHead == pNode) 124 | { 125 | pLinkTable->pHead = pLinkTable->pHead->pNext; 126 | pLinkTable->SumOfNode -= 1 ; 127 | if(pLinkTable->SumOfNode == 0) 128 | { 129 | pLinkTable->pTail = NULL; 130 | } 131 | pthread_mutex_unlock(&(pLinkTable->mutex)); 132 | return SUCCESS; 133 | } 134 | tLinkTableNode * pTempNode = pLinkTable->pHead; 135 | while(pTempNode != NULL) 136 | { 137 | if(pTempNode->pNext == pNode) 138 | { 139 | pTempNode->pNext = pTempNode->pNext->pNext; 140 | pLinkTable->SumOfNode -= 1 ; 141 | if(pLinkTable->SumOfNode == 0) 142 | { 143 | pLinkTable->pTail = NULL; 144 | } 145 | pthread_mutex_unlock(&(pLinkTable->mutex)); 146 | return SUCCESS; 147 | } 148 | pTempNode = pTempNode->pNext; 149 | } 150 | pthread_mutex_unlock(&(pLinkTable->mutex)); 151 | return FAILURE; 152 | } 153 | 154 | /* 155 | * Search a LinkTableNode from LinkTable 156 | * int Conditon(tLinkTableNode * pNode); 157 | */ 158 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)) 159 | { 160 | if(pLinkTable == NULL || Conditon == NULL) 161 | { 162 | return NULL; 163 | } 164 | tLinkTableNode * pNode = pLinkTable->pHead; 165 | while(pNode != NULL) 166 | { 167 | if(Conditon(pNode) == SUCCESS) 168 | { 169 | return pNode; 170 | } 171 | pNode = pNode->pNext; 172 | } 173 | return NULL; 174 | } 175 | 176 | /* 177 | * get LinkTableHead 178 | */ 179 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable) 180 | { 181 | if(pLinkTable == NULL) 182 | { 183 | return NULL; 184 | } 185 | return pLinkTable->pHead; 186 | } 187 | 188 | /* 189 | * get next LinkTableNode 190 | */ 191 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode) 192 | { 193 | if(pLinkTable == NULL || pNode == NULL) 194 | { 195 | return NULL; 196 | } 197 | tLinkTableNode * pTempNode = pLinkTable->pHead; 198 | while(pTempNode != NULL) 199 | { 200 | if(pTempNode == pNode) 201 | { 202 | return pTempNode->pNext; 203 | } 204 | pTempNode = pTempNode->pNext; 205 | } 206 | return NULL; 207 | } 208 | 209 | -------------------------------------------------------------------------------- /ase2013/linktable/linktable.h: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : linktabe.h */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : interface of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * 20 | */ 21 | 22 | #ifndef _LINK_TABLE_H_ 23 | #define _LINK_TABLE_H_ 24 | 25 | 26 | #define SUCCESS 0 27 | #define FAILURE (-1) 28 | 29 | /* 30 | * LinkTable Node Type 31 | */ 32 | typedef struct LinkTableNode 33 | { 34 | struct LinkTableNode * pNext; 35 | }tLinkTableNode; 36 | 37 | /* 38 | * LinkTable Type 39 | */ 40 | typedef struct LinkTable tLinkTable; 41 | 42 | /* 43 | * Create a LinkTable 44 | */ 45 | tLinkTable * CreateLinkTable(); 46 | /* 47 | * Delete a LinkTable 48 | */ 49 | int DeleteLinkTable(tLinkTable *pLinkTable); 50 | /* 51 | * Add a LinkTableNode to LinkTable 52 | */ 53 | int AddLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 54 | /* 55 | * Delete a LinkTableNode from LinkTable 56 | */ 57 | int DelLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 58 | /* 59 | * Search a LinkTableNode from LinkTable 60 | * int Conditon(tLinkTableNode * pNode); 61 | */ 62 | tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)); 63 | /* 64 | * get LinkTableHead 65 | */ 66 | tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable); 67 | /* 68 | * get next LinkTableNode 69 | */ 70 | tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable,tLinkTableNode * pNode); 71 | 72 | #endif /* _LINK_TABLE_H_ */ 73 | 74 | 75 | -------------------------------------------------------------------------------- /ase2013/linktable/testlinktable.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2012-2013 */ 4 | /* */ 5 | /* FILE NAME : testlinktabe.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : LinkTable */ 8 | /* MODULE NAME : LinkTable */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : test of Link Table */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2012/12/30 19 | * Verified callback and head/next for search by Mengning,2012/09/17 20 | * 21 | */ 22 | 23 | #include 24 | #include 25 | #include 26 | #include"linktable.h" 27 | 28 | #define debug 29 | 30 | typedef struct Node 31 | { 32 | tLinkTableNode * pNext; 33 | int data; 34 | }tNode; 35 | 36 | tNode * Search(tLinkTable *pLinkTable); 37 | int SearchConditon(tLinkTableNode * pLinkTableNode); 38 | 39 | int main() 40 | { 41 | int i; 42 | tLinkTable * pLinkTable = CreateLinkTable(); 43 | assert(pLinkTable != NULL); 44 | for(i = 0; i < 10; i++) 45 | { 46 | tNode* pNode = (tNode*)malloc(sizeof(tNode)); 47 | pNode->data = i; 48 | debug("AddLinkTableNode\n"); 49 | AddLinkTableNode(pLinkTable,(tLinkTableNode *)pNode); 50 | } 51 | /* search by callback */ 52 | debug("SearchLinkTableNode\n"); 53 | tNode* pTempNode = (tNode*)SearchLinkTableNode(pLinkTable,SearchConditon); 54 | printf("%d\n",pTempNode->data); 55 | /* search one by one */ 56 | pTempNode = Search(pLinkTable); 57 | printf("%d\n",pTempNode->data); 58 | debug("DelLinkTableNode\n"); 59 | DelLinkTableNode(pLinkTable,(tLinkTableNode *)pTempNode); 60 | free(pTempNode); 61 | DeleteLinkTable(pLinkTable); 62 | } 63 | 64 | tNode * Search(tLinkTable *pLinkTable) 65 | { 66 | debug("Search GetLinkTableHead\n"); 67 | tNode * pNode = (tNode*)GetLinkTableHead(pLinkTable); 68 | while(pNode != NULL) 69 | { 70 | if(pNode->data == 5) 71 | { 72 | return pNode; 73 | } 74 | debug("GetNextLinkTableNode\n"); 75 | pNode = (tNode*)GetNextLinkTableNode(pLinkTable,(tLinkTableNode *)pNode); 76 | } 77 | return NULL; 78 | } 79 | 80 | int SearchConditon(tLinkTableNode * pLinkTableNode) 81 | { 82 | tNode * pNode = (tNode *)pLinkTableNode; 83 | if(pNode->data == 6) 84 | { 85 | return SUCCESS; 86 | } 87 | return FAILURE; 88 | } 89 | -------------------------------------------------------------------------------- /ase2013/students.c: -------------------------------------------------------------------------------- 1 | 2 | /********************************************************************/ 3 | /* Copyright (C) SSE-USTC, 2013-2014 */ 4 | /* */ 5 | /* FILE NAME : students.c */ 6 | /* PRINCIPAL AUTHOR : Mengning */ 7 | /* SUBSYSTEM NAME : students */ 8 | /* MODULE NAME : students */ 9 | /* LANGUAGE : C */ 10 | /* TARGET ENVIRONMENT : ANY */ 11 | /* DATE OF FIRST RELEASE : 2012/12/30 */ 12 | /* DESCRIPTION : students info manager system */ 13 | /********************************************************************/ 14 | 15 | /* 16 | * Revision log: 17 | * 18 | * Created by Mengning,2013/09/09 19 | * Debug and Test by Mengning,2013/09/13 20 | * 21 | */ 22 | 23 | #include 24 | #include 25 | #include"linktable.h" 26 | 27 | int main() 28 | { 29 | tStudent * pStudent = NULL; 30 | int i = 0; 31 | 32 | /* insert 1000 students */ 33 | for (i=0;i<1000;i++) 34 | { 35 | insert(i,i); 36 | } 37 | 38 | for (i=0;i<1000;i++) 39 | { 40 | /* random() return long int value,0 to (2^31 - 1) */ 41 | int id = random() % 1000; 42 | pStudent = search(id); 43 | } 44 | return 0; 45 | } 46 | 47 | -------------------------------------------------------------------------------- /menu_v1.0.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/menu_v1.0.tar.gz -------------------------------------------------------------------------------- /se2019.md: -------------------------------------------------------------------------------- 1 | # 软件工程 2019 2 | 3 | [加入班级博客](http://edu.cnblogs.com/campus/ustc/se2019/join?id=CfDJ8DeHXSeUWr9KtnvAGu7_dX9lMCvo8lX0yoh--X5fjQf2xGCsdVpr97WyH6ce8OW7E-H0P0DWe7xz_4sU-IeaxMINPjaMbdZUz2evpHl9hk-Z345IERSzhBLbRgjYcNQXo13U2_LS1OIbnYYNpbvokoA)【所有作业都通过该博客系统提交,请务必严格遵守作业截止时间】 4 | 5 | * [Introduction](https://github.com/mengning/ase/raw/master/se2019/ASE_1_intro.pdf) 6 | * [Why Software Engineering](https://github.com/mengning/ase/raw/master/se2019/ASE_1_SoftwareEngineering.pdf) 7 | 8 | ### 程序员的基本功 9 | 10 | * 键盘练习 —— 输入速度、快捷键等 11 | * 键盘输入方法训练https://www.typingclub.com https://www.typingtest.com/ 12 | * 能够熟练操作的工具集 —— VSCode/Vim、正则表达式等 13 | * [Tools.pdf](https://github.com/mengning/ase/raw/master/se2019/Tools.pdf) 14 | * 正则表达式练习 https://www.w3cschool.cn/zhengzebiaodashi/ https://www.w3cschool.cn/codecamp/list?pename=regular_expressions_camp 15 | * 编译和调试工具 16 | 17 | ### 如何编写程序? 18 | 19 | * 代码规范和风格 —— 缩进、命名、注释等 20 | * [Writing_the_Programs.pdf](https://github.com/mengning/ase/raw/master/se2019/Writing_the_Programs.pdf) 21 | * 测试驱动开发TDD —— 单元测试 22 | * [Coding_Exercise.pdf](https://github.com/mengning/ase/raw/master/se2019/ASE_2_Coding_Exercise.pdf) 23 | * 分解任务Work Breakdown 24 | * 写程序就是在不同抽象层级上分解任务,以决定任务的执行次序、执行条件和循环执行。 25 | * 1)确定程序的功能目标,定义接口给出程序的典型的输入和输出,并给出测试用例; 26 | * 2)为了完成功能目标在最高抽象层级上通过顺序、分支和循环组织需要完成的子程序; 27 | * 3)为每一个子程序定义接口,添加异常处理,goto 1)。 28 | * 软件工程(C编码实践篇)https://mooc.study.163.com/course/1000002006 课程主要实验都在Linux环境(使用自己的linux环境或实验楼)下演示,如果您之前从来没有接触过Linux系统或者不熟悉Linux Shell的基本命令,请您参考http://www.cnblogs.com/laov/p/3541414.html 29 | 30 | ### 需求分析与设计 31 | 32 | * 业务理解与分析 33 | * [UseCaseModeling.pdf](https://github.com/mengning/ase/raw/master/se2019/UseCaseModeling.pdf) 34 | * [DomainModeling.pdf](https://github.com/mengning/ase/raw/master/se2019/DomainModeling.pdf) 35 | * [MongoDB数据库设计.pdf](https://github.com/mengning/ase/raw/master/se2019/MongoDB%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1.pdf) 36 | * The Agile Unified Process:From Analysis to Design 37 | * [ObjectInteractionModeling-DesignClassDiagram.pdf](https://github.com/mengning/ase/raw/master/se2019/ObjectInteractionModeling-DesignClassDiagram.pdf) 38 | * 需求工程 39 | * 需求挖掘 40 | * 原型方法 41 | * [Capturing_the_Requirements.pdf](https://github.com/mengning/ase/raw/master/se2019/Capturing_the_Requirements.pdf) 42 | 43 | ### 代码的结构、特性和描述方法 44 | 45 | * [OO & UML](https://github.com/mengning/ase/raw/master/se2019/OO-UML.pdf) 46 | * [Designing_the_Modules.pdf](https://github.com/mengning/ase/raw/master/se2019/Designing_the_Modules.pdf) 47 | * 代码的封装接口 48 | * 设计模式 [DesignPatterns.pdf](https://github.com/mengning/ase/raw/master/se2019/DesignPatterns.pdf) 49 | * [策略模式范例:商场促销商品](http://219.219.220.231/raw-attachment/wiki/ASE2013/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F.zip) 50 | * [桥接模式范例:开关与电灯的桥接模式实现](http://219.219.220.231/raw-attachment/wiki/ASE2013/%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F_%E6%B2%88%E7%91%B6.zip) 51 | * [观察者模式范例:高温预警系统](http://219.219.220.231/raw-attachment/wiki/ASE2013/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F.zip) 52 | * [抽象工厂模式范例:Warcraft:Orcs & Humans](http://219.219.220.231/raw-attachment/wiki/ASE2013/%E6%8A%BD%E8%B1%A1%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F.zip) 53 | * 高内聚低耦合 54 | * [单元测试和集成测试](https://github.com/mengning/ase/raw/master/se2019/Testing_the_Programs.pptx) 55 | * 期中回顾 56 | * 案例研究:socket相关代码 57 | * socket接口的设计特点 58 | * 原生socket编程 59 | * 外部接口本地化 60 | * 外观模式 61 | * 案例研究:menu 62 | * https://github.com/mengning/menu 63 | * 软件工程(C编码实践篇)https://mooc.study.163.com/course/1000002006 64 | * 案例研究:未来的图书是什么样的? 65 | * e-book作为纸质图书的电子化,固守着纸质载体的空间顺序图文特点,结合互联网之后出现了慕课、付费阅读、在线课程等新的形态; 66 | * 互联网条件下提供了虚拟高维空间链接和多媒体交互性,以游戏、多媒体交互式课件为典型代表; 67 | * 从作者和读者两个角度看,未来的图书会是什么样的? 68 | * 架构风格 69 | * 代码结构视图 70 | * Designing the Architecture [Designing_the_Architecture.ppt](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Designing_the_Architecture.ppt) [Designing_the_Architecture-continue.ppt](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Designing_the_Architecture-continue.ppt) 71 | * Most design work is routine design, solve problem by reusing and adapting solutions from similar problems 72 | * Some design problems have no existing solutions,Designers must decompose to isolate key problems 73 | * architectural views: 74 | ``` 75 | Decomposition view 76 | Dependencies view 77 | Generalization view 78 | Execution view 79 | Implementation view 80 | Deployment view 81 | Work-assignment view 82 | ``` 83 | * Architectural Styles and Strategies 84 | * Achieving Quality Attributes 85 | ``` 86 | Modifiability 87 | Performance 88 | Security 89 | Reliability 90 | Robustness 91 | Usability 92 | Business goals 93 | ``` 94 | 95 | ### 软件工程过程与项目管理 96 | 97 | * 软件的生命周期 98 | * 软件开发过程 99 | * [Modeling-the-Process-and-Life-Cycle.pptx](https://github.com/mengning/ase/raw/master/se2019/Modeling-the-Process-and-Life-Cycle.pptx) 100 | * [轻松理解CMMI](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/CMMI.ppt) 101 | * PSP和TSP 102 | * [Scrum简介](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Scrum.ppt) 103 | * [DevOps](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/DevOps.pdf) 104 | * Planning and Managing the Project - [1](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Planning-and-Managing-the-Project-1.ppt)-[2](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Planning-and-Managing-the-Project-2.ppt)-[3](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Planning-and-Managing-the-Project-3.ppt)-[4](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Planning-and-Managing-the-Project-4.ppt) 105 | * [Delivering the System](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Delivering-the-System.ppt) 106 | * Considering the Audience in Training and Documentation 107 | * [Maintaining the System](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Maintaining-the-System.ppt) 108 | * Software does not degrade or require periodic maintenance,However, software is continually evolving,so Maintenance process can be difficult. 109 | * The more a system is linked to the real world, the more likely it will change and the more difficult it will be to maintain 110 | * Impact analysis builds and tracks links among the requirements, design, code, and test cases 111 | * Software rejuvenation involves redocumenting, restructuring, reverse engineering, and reengineering 112 | * [The Future of Software Engineering](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/The-Future-of-Software-Engineering.ppt) 113 | * 软件工程各阶段的目标 114 | * User Experience 115 | * Concrete Requirement 116 | * Clear/Unambiguous Specification 117 | * Loosely Coupled、Functional Cohesion、Hierarchy of Abstraction 118 | * Readable Solid Code 119 | * Test Thoroughness 120 | * [Why-Software-Engineering](https://coding.net/u/mengning/p/mengning/git/raw/master/ase/Why-Software-Engineering.ppt) 121 | -------------------------------------------------------------------------------- /se2019/ASE_1_SoftwareEngineering.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/ASE_1_SoftwareEngineering.pdf -------------------------------------------------------------------------------- /se2019/ASE_1_intro.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/ASE_1_intro.pdf -------------------------------------------------------------------------------- /se2019/ASE_2_Coding_Exercise.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/ASE_2_Coding_Exercise.pdf -------------------------------------------------------------------------------- /se2019/Capturing_the_Requirements.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/Capturing_the_Requirements.pdf -------------------------------------------------------------------------------- /se2019/DesignPatterns.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/DesignPatterns.pdf -------------------------------------------------------------------------------- /se2019/Designing_the_Modules.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/Designing_the_Modules.pdf -------------------------------------------------------------------------------- /se2019/DomainModeling.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/DomainModeling.pdf -------------------------------------------------------------------------------- /se2019/Modeling-the-Process-and-Life-Cycle.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/Modeling-the-Process-and-Life-Cycle.pptx -------------------------------------------------------------------------------- /se2019/MongoDB数据库设计.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/MongoDB数据库设计.pdf -------------------------------------------------------------------------------- /se2019/MongoDB数据库设计.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/MongoDB数据库设计.pptx -------------------------------------------------------------------------------- /se2019/OO-UML.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/OO-UML.pdf -------------------------------------------------------------------------------- /se2019/ObjectInteractionModeling-DesignClassDiagram.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/ObjectInteractionModeling-DesignClassDiagram.pdf -------------------------------------------------------------------------------- /se2019/README.md: -------------------------------------------------------------------------------- 1 | # 软件工程se2019 2 | -------------------------------------------------------------------------------- /se2019/Testing_the_Programs.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/Testing_the_Programs.pptx -------------------------------------------------------------------------------- /se2019/Tools.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/Tools.pdf -------------------------------------------------------------------------------- /se2019/UseCaseModeling.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/UseCaseModeling.pdf -------------------------------------------------------------------------------- /se2019/Writing_the_Programs.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/Writing_the_Programs.pdf -------------------------------------------------------------------------------- /se2019/网络安全等级保护.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2019/网络安全等级保护.pptx -------------------------------------------------------------------------------- /se2020.md: -------------------------------------------------------------------------------- 1 | # 软件工程 2020 2 | 3 | 战“疫”当前,本次授课前8次课暂时采用在线直播方式,直播链接参见:https://www.julyedu.com/course/getDetail/234 为了让线上课程相对完整,8次课主要包含码农的必备技能和工程化编程实战两部分,后续部分包括需求分析与设计、代码的结构特性和描述方法、软件工程过程与项目管理,以及课程总结,将根据疫情进展情况由教学部决定是否采用线上直播方式。 4 | 5 | 码农的必备技能和工程化编程实战两部分具体包括基础技能和工具(Typing - VSCode - Git - Vim - RegEx)的使用以及一个工程化的C语言项目范例。工程化的C语言项目范例是“国家精品在线开放课程”————工程化编程实战https://mooc.study.163.com/course/1000103000?_trace_c_p_k2_=f8005111e1924552b5f7dddc1b872bf5&share=2&shareId=1000001002#/info 6 | 7 | 课程主页参见:https://github.com/mengning/ase/blob/master/se2020.md 8 | 课程作业参见:[https://edu.cnblogs.com/campus/ustc/se2020](https://edu.cnblogs.com/campus/ustc/se2020/join?id=CfDJ8Nf-Z6tqUPlNrwu2nvfTJEiZ-aP-iLoF3yOvdJg0GgpFtzaeoEm5LZCSMFpQsWXBn2_fxuzGbLOnXB3xFb09CvlHOwY0yjlKpbps8PBH8WSGdlQcceqne8cE_kSTwZgXT681l-sa_44G3cDKqmoK2q8) 请通过本链接注册进入。 9 | 10 | ## 课程简介 11 | 12 | [Software Engineering————码农的自我修养](https://github.com/mengning/ase/raw/master/se2020/1%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B-%E7%A0%81%E5%86%9C%E7%9A%84%E8%87%AA%E6%88%91%E4%BF%AE%E5%85%BB.pdf) 13 | 14 | ### 码农的自我修养之必备技能 15 | 16 | * [Tools - Typing - VSCode - Git - Vim - RegEx.pdf](https://github.com/mengning/ase/raw/master/se2020/Tools%20-%20Typing%20-%20VSCode%20-%20Git%20-%20Vim%20-%20RegEx.pdf) 17 | * Typing 18 | * https://www.typingclub.com 19 | * VSCode/Vim/Regex 20 | * 正则表达式练习 https://www.w3cschool.cn/zhengzebiaodashi/ https://www.w3cschool.cn/codecamp/list?pename=regular_expressions_camp 21 | * 编译和调试工具 22 | 23 | 24 | ### 工程化编程实战 25 | 26 | * [工程化编程实战.pdf](https://github.com/mengning/ase/raw/master/se2020/工程化编程实战.pdf) 27 | * 实验参考代码[se_code.zip](https://github.com/mengning/ase/raw/master/se2020/se_code.zip)和https://github.com/mengning/menu 28 | 29 | 30 | ### 需求分析与设计 31 | 32 | 33 | 34 | ### 代码的结构、特性和描述方法 35 | 36 | 37 | 38 | ### 软件工程过程与项目管理 39 | 40 | ## 课程总结 41 | 42 | -------------------------------------------------------------------------------- /se2020/1软件工程-码农的自我修养.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2020/1软件工程-码农的自我修养.pdf -------------------------------------------------------------------------------- /se2020/README.md: -------------------------------------------------------------------------------- 1 | # se2020 2 | -------------------------------------------------------------------------------- /se2020/Tools - Typing - VSCode - Git - Vim - RegEx.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2020/Tools - Typing - VSCode - Git - Vim - RegEx.pdf -------------------------------------------------------------------------------- /se2020/menu.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2020/menu.zip -------------------------------------------------------------------------------- /se2020/se_code.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2020/se_code.zip -------------------------------------------------------------------------------- /se2020/工程化编程实战.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mengning/ase/f575d2476c27ecb95d9b9c315ca7147d30b19767/se2020/工程化编程实战.pdf --------------------------------------------------------------------------------